Autor Beitrag
MephistoFFF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: Do 05.02.09 16:41 
Und schon wieder hat er eine Frage^^

Hab schon gesucht ( Google und auch hier ), aber nichts Brauchbares gefunden...
Wie kann ich Folgendes am besten lösen?
Das Programm soll aus einer Textdatei ( *.txt ) eine bestimmte Zeile löschen. Wichtig ist, dass die gesamte Zeile gelöscht wird, und das Nachfolgende sozusagen "aufrückt". Das beste wäre, wenn man die zu löschende Zeile genau nach dem in der Zeile stehenden Text ermitteln könnte.

Vielen Dank schonmal ;) .

mfG


Zuletzt bearbeitet von MephistoFFF am Do 05.02.09 19:31, insgesamt 1-mal bearbeitet
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 05.02.09 17:06 
Lad die Datei in eine TStringlist, durchsuche diese zeilenweise nach dem Text und lösche die betreffende Zeile bei Fund. Anschließend wieder speichern. Bedenke aber dabei, dass Du die Schleife absteigend definieren musst (zumindest bei einer for-Schleife), sonst knallt es.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 05.02.09 17:07 
Wenn die Datei nicht allzu groß ist, dann kannst du eine TStringList nehmen, die Datei da hineinladen, direkt Delete aufrufen und die Datei wieder speichern. ;-)
MephistoFFF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: Do 05.02.09 17:17 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.Button1Click(Sender: TObject);
var
  strlst: TStringList;
begin
  strlst := TStringList.Create;
  try
    strlst.LoadFromFile('test.txt');
    while (strlst.IndexOf('abcd') <> -1do
      strlst.Delete(strlst.IndexOf('abcd'));
    strlst.SaveToFile('test.txt');
  finally
    strlst.Free;
  end;
end;


So hab ichs schon probiert, aber da passiert garnichts...
Dateinamen etc. sind natürlich angepasst ;) ...

mfG
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 05.02.09 17:20 
Was steht denn in der betreffenden Zeile? Nur 'abcd' oder noch etwas anderes?
MephistoFFF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: Do 05.02.09 17:25 
user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
Was steht denn in der betreffenden Zeile? Nur 'abcd' oder noch etwas anderes?


Wie gesagt, das wird dann mit ListBox1.Items.Strings[strtoint(Index)] ersetzt ( das abcd )...
Der Text ist dann ein kurzer Text, er kann, muss aber nicht, Leerzeichen und "." enthalten...

mfG
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 05.02.09 17:43 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Button1Click(Sender: TObject);
var
  strlst: TStringList;
  i: integer;
begin
  strlst := TStringList.Create;
  try
    strlst.LoadFromFile('test.txt');
    for i := strlst.Count - 1 downto 0 do
      if Pos('abcd',strlst[i]) > 0 then
        strlst.Delete(i);
    strlst.SaveToFile('test.txt');
  finally
    strlst.Free;
  end;
end;
MephistoFFF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: Do 05.02.09 18:40 
user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Button1Click(Sender: TObject);
var
  strlst: TStringList;
  i: integer;
begin
  strlst := TStringList.Create;
  try
    strlst.LoadFromFile('test.txt');
    for i := strlst.Count - 1 downto 0 do
      if Pos('abcd',strlst[i]) > 0 then
        strlst.Delete(i);
    strlst.SaveToFile('test.txt');
  finally
    strlst.Free;
  end;
end;


Der Code hier funktioniert wunderbar, aber erst nachdem ich einen anderen Fehler behoben habe, aufgrund dessen die Prozedur zum löschen nie aufgerufen wurde... ^^
Also danke nochmal an alle^^

mfG
MephistoFFF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: Do 05.02.09 19:33 
Sorry für den Doppelpost, aber mir ist gerade noch was aufgefallen:

Es funktioniert soweit alles wunderbar, die Zeilen rutschen auch nach...
ABER: Am Ende der Textdatei entstehen neue Zeilen, zwar ohne text, aber sie sind eben da und werden dementsprechend mit in die listbox übernommen, was ein ziemlich großes Problem darstellt^^

kann ich das irgendwie beheben?

mfG

EDIT: habs jetzt erstmal provisorisch so gelöst:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
for i := 0 to Listbox1.items.count -1 do
if ListBox1.Items.Strings[i]= '' then
begin
listbox1.items.Delete(i);
end;

^^
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 05.02.09 20:28 
ausblenden Delphi-Quelltext
1:
ListBox1.Text := Trim(ListBox1.Text);					
;-)
MephistoFFF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: Do 05.02.09 20:33 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
ListBox1.Text := Trim(ListBox1.Text);					
;-)


Noch nie von "Trim" gehört...^^ Was genau macht das? Im Prinzip das gleiche wie "meine" for-Schleife?

mfG^^
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 05.02.09 20:40 
F1 hilft. ;-)
Trim entfernt alle Leerzeichen und Steuerzeichen am Anfang und Ende eines Strings.
MephistoFFF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: Do 05.02.09 20:44 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
F1 hilft. ;-)
Trim entfernt alle Leerzeichen und Steuerzeichen am Anfang und Ende eines Strings.


Sehr gut, vielen Dank...

Damit dürfte das Thema aber nun wirklich erledigt sein^^

mfG