Autor |
Beitrag |
badstuberl
Hält's aus hier
Beiträge: 11
|
Verfasst: Di 19.04.11 11:25
hallo beisammen!
ich hoffe, ihr könnt mir helfen.
ich würde gerne gezielt zeilen in einer textdatei löschen.
sowas wie:
<snip here>
hier
steht
nun text
</snip here>
und danach soll der text so aussehen:
<snip here>
</snip here>
also der kram dazwischen soll weg. geht sowas in delphi?
danke! 
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 19.04.11 11:27
Lad die Datei in eine StringListe. Finde die Zeilen zwischen denn du löschen willst mit pos und lösche die Zeilen dazwischen. Das ganze kannst du in einer Schleife über die Zeichenketten der StringListe machen.
|
|
badstuberl 
Hält's aus hier
Beiträge: 11
|
Verfasst: Di 19.04.11 11:58
|
|
HenryHux
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Di 19.04.11 12:04
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var List : TStringList; i : Integer; begin List := TStringList.Create; List.LoadFromFile('Pfad zur Datei'); for i := 0 to List.Count do begin if pos('Zu löschende Zeile', List[i]) > 0 then List.Delete(i); end; end; |
lg
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 19.04.11 12:21
Der Source von HenryHux wird nicht funktionieren.
Es wird eine Exception kommen, da die Schleife über das Listen-Ende hinaus geht.
Jedes Delete verändert auch noch zusätzlich den Wert von List.Count.
Besser so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| var List : TStringList; i : Integer; begin List := TStringList.Create; List.LoadFromFile('<richtige Datei reinschreiben>'); for i := List.Count-1 downto 0 do begin if pos('Zu löschende Zeile', List.Lines[i]) > 0 then List.Delete(i); end; List.SaveTofile('<Dateiname>'); List.Free; end; |
Zuletzt bearbeitet von jasocul am Di 19.04.11 12:36, insgesamt 1-mal bearbeitet
|
|
HenryHux
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Di 19.04.11 12:26
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 19.04.11 12:30
War auch als konstruktive Kritik gemeint und nicht als fiese Besserwisserei (vielleicht doch ein bisschen  ) 
|
|
badstuberl 
Hält's aus hier
Beiträge: 11
|
Verfasst: Di 19.04.11 13:24
danke schon mal für eure antworten! ich möchte nun nach dem löschen auch noch was einfügen. dafür habe ich mir global eine tstringlist deklariert, die wird im main-teil per create erzeugt. nun möchte ich diese stringlist in einer prozedur füllen und später in "main" wieder ausgeben. aber das klappt nicht. die stringlist scheint nur innerhalb der prozedur "zu leben", nach der prozedur ist die stringlist wieder leer, obwohl sie in "main" konstruiert wurde. was läuft da falsch?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 19.04.11 13:31
Übergibst du sie denn an die entsprechende Prozedur? Oder ist sie unter private des Formulars deklariert?
|
|
badstuberl 
Hält's aus hier
Beiträge: 11
|
Verfasst: Di 19.04.11 13:33
|
|
HenryHux
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Di 19.04.11 13:49
Was vielleicht daran liegt, dass du sie freigibst? 
|
|
guinnes
      
Beiträge: 182
Erhaltene Danke: 14
|
Verfasst: Di 19.04.11 13:51
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 19.04.11 13:55
Er macht es doch richtig.
Es ist eine Konsolen-Anwendung. Die Freigabe erfolgt erst am Ende des Programms.
Er füllt die Liste mit seiner Routine fillstringlist. Danach gibts eine Schleife, wo er die Liste ausgibt. Erst danach kommt die Freigabe.
Was aber in der Procedure bei "..." noch alles passiert, kann ich auch nicht sagen.
|
|
badstuberl 
Hält's aus hier
Beiträge: 11
|
Verfasst: Di 19.04.11 13:59
omg... ich bin wirklich ein noob... sorry leutz! hat alles funktioniert. man sollte evtl. noch ein readln; hinter die ausgabe machen, dann sieht man auch seinen text -.-
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 19.04.11 14:04
|
|