Entwickler-Ecke
Dateizugriff - String block aus datei auslesen
foxy - Mo 04.11.02 11:41
Titel: String block aus datei auslesen
Sers Leute ich brauche hilfe =)
also zu meine Problem ... meine textdatei hat 9000 Zeilen und ich will das so handhaben das wenn ich einen string eingebe
bsp: 12:15 und einen 2. bsp: 12:17 das er alle zeilen auswertet und in einer dbmemo ausgibt aber jetzt kommts =)
dazwischen können auch noch andere Zeile sein also die mit 12:16 die will ich aber auch in meiner memo haben ... wie bekomme ich die da rein ich schreibe mal quellcode hin wie weit ich bin ...
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| with dbmemo1 do scrollBars:=SSboth; ReSet(f); //Datei zum Lesen öffnen DBMemo1.Clear; //Memo leeren ZNr:=0; Repeat ZNr:=ZNr+1; ReadLn(f,Zeile); //Zeile lesen If Pos(EditZeit.Text,Zeile)>0 Then begin DBMemo1.Lines.Add( 'Zeilennr.: '+IntToStr(ZNr)+': '+Zeile); repeat ZNr:=ZNr+1; Readln(f,Zeile); DBMemo1.Lines.Add( 'Zeilennr.: '+IntToStr(ZNr)+': '+Zeile ); until Pos(Editzeit.Text,Zeile)=0; end; If Pos(EditZeit2.Text,Zeile)>0 then DBMemo1.Lines.Add( 'Zeilennr.: '+IntToStr(ZNr)': '+Zeile ); Until EOF(f); showmessage(copie(DBMemo1.lines.strings[r1],1,38)); CloseFile(f); |
aber irgendwie gibt der mir dann noch eine zeile dazwsichen aus und beendet dann die schleife an was liegt das BITTE UM HILLLLFEEEEEE =)
danke
Raphael82 - Mo 04.11.02 23:57
Zu deinem Code: Nicht böse sein aber... :(
So wie ich es verstanden habe willst du in der Datei, zeile für Zeile nach 2 Strings suchen lassen (12:15 bzw 12:17 als Beispiel). Wenn einer der Strings in der jeweiligen Zeile enthalten ist soll die Zeile in einem Memo ausgegeben werden. Was dazwischen liegt willst du nicht haben.
So hab ichs verstanden. So sollte das gehen: (Code ist ungetestet und nur eben so hingepfuscht!)
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| function DatenLesen(DateiName,sub1,sub2:string):Boolean; var Datei : TextFile; Zeile : String; i : integer; begin i:=1; Result := false; AssignFile(Datei, DateiName); if not FileExists(DateiName) then exit; DBMemo1.Clear; try ReSet(Datei); while not eof(Datei) do begin ReadLn(Datei,s); if pos(sub1,s)>0 then begin DBMemo1.Lines.Add('Zeilennr. : ' +IntToStr(i)+': '+s); Result := true; end; if pos(sub2,s)>0 then begin DBMemo1.Lines.Add('Zeilennr. : ' +IntToStr(i)+': '+s); Result := true; end; inc(i); end; except ShowMessage('Fehler beim lesen der Datei!'); end; end; |
An "DateiName" übergibst du den DateiNamen als String.
"sub1" und "sub2" sind die 2 Strings nach denen gesucht werden soll.
Die Funktion gibt "true" zutück wenn die Datei wenigstens einen der Strings beinhaltet und "false" wenn dem nicht so ist!
MfG, Raphael
foxy - Di 05.11.02 09:42
emm naja fast =) ... das iss ja gerade mein problem ich will dazwichen das haben das andere geht ja wunderbar .... aber dazwischen die zeilen brauch ich auch :cry: un da bekomm ich nur eine zeile dann bricht er ab ab aber sonst hat du das prinzip verstanden :lol:
Raphael82 - Di 05.11.02 14:46
Auch kein Problem:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| function DatenLesen(DateiName,sub1,sub2:string):Boolean; var Datei : TextFile; Zeile : String; i : integer; begin i:=1; Result := false; AssignFile(Datei, DateiName); if not FileExists(DateiName) then exit; DBMemo1.Clear; try ReSet(Datei); while not eof(Datei) do begin ReadLn(Datei,s); if pos(sub1,s)>0 then begin Result := true; DBMemo1.Lines.Add('Zeilennr. : ' +IntToStr(i)+': '+s); repeat ReadLn(Datei,s); DBMemo1.Lines.Add('Zeilennr. : ' +IntToStr(i)+': '+s); inc(i); until pos(sub2,s)>0; end; inc(i); end; except ShowMessage('Fehler beim lesen der Datei!'); end; end; |
Wenn es sicher ist, dass beide SubStrings nur einmal in der Datei vorkommen, kannst du den Code um eine Schleife kürzen.
MfG, Raphael
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!