Entwickler-Ecke
Dateizugriff - in delphi bestimmte zeilen aus einer datei löschen
badstuberl - Di 19.04.11 10:25
Titel: in delphi bestimmte zeilen aus einer datei löschen
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!:)
Delete - Di 19.04.11 10: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 - Di 19.04.11 10:58
Moderiert von
Narses: Komplett-Zitat des letzten Beitrags entfernt.
also mit indexof kriege ich ja schonmal die zeilennummern raus. dann kann ich ja sowas sagen wie
Delphi-Quelltext
1: 2: 3: 4:
| for i:=snipstart to snipende begin stringliste[snipstart].delete; end; |
das klappt aber leider nicht. ich bekomme ein E2018, record, objekt oder klassentyp erforderlich...
Moderiert von
Narses: Delphi-Tags hinzugefügt
HenryHux - Di 19.04.11 11: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 - Di 19.04.11 11: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; |
HenryHux - Di 19.04.11 11:26
jasocul hat folgendes geschrieben : |
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.
|
Ok, das stimmt, schnell getippt ohne nachzudenken :D
jasocul - Di 19.04.11 11:30
War auch als konstruktive Kritik gemeint und nicht als fiese Besserwisserei (vielleicht doch ein bisschen :mrgreen:) :wink:
badstuberl - Di 19.04.11 12: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 - Di 19.04.11 12:31
Übergibst du sie denn an die entsprechende Prozedur? Oder ist sie unter private des Formulars deklariert?
badstuberl - Di 19.04.11 12:33
jaenicke hat folgendes geschrieben : |
| Übergibst du sie denn an die entsprechende Prozedur? Oder ist sie unter private des Formulars deklariert? |
sie ist global unter "var" deklariert, ist ne konsolen-app... und nein, noch übergebe ich sie nicht ;)
EDIT: übergeben half auch nicht...
Moderiert von
Narses: Komplett-Zitat des letzten Beitrags entfernt.
ich schreib mal den code verkürzt hin:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| program test;
uses SysUtils, Classes;
var mystrings: TStringlist;
procedure fillstringlist; begin mystrings.add('bla'); mystrings.add('something'); ... end;
begin mystrings := tstringlist.Create; fillstringlist; for i := 0 to mystrings.count-1 do writeln(mystrings[i])); mystrings.free; end. |
wie gesagt: innerhalb der prozedur ist die stringlist gefüllt, bei verlassen sind die werte futsch.
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
HenryHux - Di 19.04.11 12:49
Was vielleicht daran liegt, dass du sie freigibst? :?:
guinnes - Di 19.04.11 12:51
badstuberl hat folgendes geschrieben : |
wie gesagt: innerhalb der prozedur ist die stringlist gefüllt, bei verlassen sind die werte futsch. |
Wo sollten die Werte wohl sein, wenn du die Stringliste wieder freigibts ?
jasocul - Di 19.04.11 12: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 - Di 19.04.11 12: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 - Di 19.04.11 13:04
:rofl:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!