Entwickler-Ecke
Dateizugriff - Eine beliebige Datei komplett in einen String einlesen
Hanna Bubiskopf - Fr 04.02.05 13:34
Titel: Eine beliebige Datei komplett in einen String einlesen
ich muß dazu sagen, dass ich gerade erst mit Delphi 7 angefangen hab und vorher nur mit VB 6 geproggt habe.
vielleicht kennt jemand ein tutorial für dateifunktionen bzw. dateizugriffe?
oder jemand hat gerade parat was ich brauche: komplettes einlesen einer datei mit allen zeichen in einen string
st-matze - Fr 04.02.05 13:46
tue dies:
Delphi-Quelltext
1: 2:
| sl := TStringlist.create; sl.LoadfromFile('MyFile.txt'); |
in der eigenschaft
hast du dann die komplette datei als string
MrSaint - Fr 04.02.05 13:46
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var sInhalt, sTemp: string; fDatei: textfile; ... begin sInhalt := ''; AssignFile(fDatei, 'c:\blabla.txt'); Reset(fDatei); while not Eof(fDatei) do begin Readln(fDatei, sTemp); sInhalt := sInhalt + sTemp; end; CloseFile(fDatei); showmessage(sInhalt); end; |
MfG
MrSaint :)
EDIT: @st-matze: oder so :)
uall@ogc - Fr 04.02.05 13:56
ich bevorzuge
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| var fm: tfilestream; s: string; begin fm := tfilestream.create('C:\hallo.txt',fmopenread); setlength(s,fm.size); fm.read(s[1],fm.size); fm.free; end; |
1. weil tstringlist nicht #0 erfasst
2. weil zuviel speicher verbraucht wird wegen sInhalt := sInhalt + sTemp;, dann doch lieber BlockRead machen
MrSaint - Fr 04.02.05 14:02
@uall@ogc:
musst du dann die Länge des Strings nicht auf fm.size + 1 setzen? oder steh ich grad auf'm Schlauch?
uall@ogc - Fr 04.02.05 14:06
ne muss man nicht da s[1] das erste zeichen vom string ist
Hanna Bubiskopf - Fr 04.02.05 14:48
Titel: Vielen Dank! Ich habe es in folgende Funktion zusammengef.
:D Vielleicht braucht es ja später nochmal jemand :D
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function LoadFile(FilePath: String): String; var fm: tfilestream; s: string; begin fm := tfilestream.create(FilePath, fmopenread); setlength(s,fm.size); fm.read(s[1],fm.size); fm.free; Result:=s; end; |
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt.
uall@ogc - Fr 04.02.05 16:40
naja würde dann noch "FilePath" durch "FileName" ersetzen und keine lokale varibale benutzen sondern result direkt ansprechen
setlength(result,fm.size);
weiß jetzt nicht ob delphi da unterscheidungen macht, aber dann muss man sich keine gedanken mehr machen
Sprint - Fr 04.02.05 16:47
uall@ogc hat folgendes geschrieben: |
naja würde dann noch "FilePath" durch "FileName" ersetzen [...] |
Und um ein const erweitern...
Hanna Bubiskopf - Fr 04.02.05 18:09
:wink: Und hier meine nun optimierte Funktion nochmals - danke!
:?: PS: Wenn ich das Ganze jetzt doch lieber in einem Bytearray hätte, wie müsste dann meine Funktion lauten?
Bin halt nur neugierig. Will schnell in Delphi reinkommen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| function LoadFile(Const FileName: String): String; var fm: tfilestream; begin fm := tfilestream.create(FileName, fmopenread); setlength(result,fm.size); fm.read(result[1],fm.size); fm.free; end; |
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt.
Sprint - Fr 04.02.05 18:39
Da gibt es nun sehr viele Möglichkeiten, wie du die Daten in ein Array lesen kannst. Aber weil hier gerade mit TFileStream gearbeitet worden ist, zeige ich dir eine von vielen.
Delphi-Quelltext
1: 2:
| type TMyArray = array of Byte; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure LoadFile(const FileName: String; var MyArray: TMyArray); var Handle: THandle; begin
Handle := FileOpen(FileName, fmOpenRead); if Handle <> INVALID_HANDLE_VALUE then with TFileStream.Create(Handle) do try SetLength(MyArray, Size); Read(MyArray[0], Size); finally Free; end;
end; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button1Click(Sender: TObject); var MyArray: TMyArray; I: Integer; begin
LoadFile('C:\DF.TXT', MyArray); for I := 0 to High(MyArray) do begin end; SetLength(MyArray, 0);
end; |
MitschL - Di 08.02.05 12:11
@Sprint: Ähm; deine LoadFile-Funktion funktioniert bei mir nicht.
TFileStream.Create erlaubt bei mir keine Handles
Hm. Ob das an Delphi 5 liegen kann?
gegrüßt!
Sprint - Di 08.02.05 16:09
MitschL hat folgendes geschrieben: |
Ob das an Delphi 5 liegen kann? |
Ja. Liegt an Delphi 5.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!