Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bestimmten Text unter eine bestimmte Zeile einer Textdatei (https://www.delphipraxis.net/151147-bestimmten-text-unter-eine-bestimmte-zeile-einer-textdatei.html)

Ghostleader 7. Mai 2010 13:13


Bestimmten Text unter eine bestimmte Zeile einer Textdatei
 
Meine Frage ist, wie man einen Text aus einem Memo genau unter ein bestimmte Zeile
einer Textdatei speichern/einfügen kann.

Inhalt der Zeile und Text aus dem Memo sind natürlich bekannt.
Gibt es eine Funktion, mit der man eine Textdatei nach einer Zeile durchsuchen kann und
unter diese einen bestimmten Text speichern kann.

haentschman 7. Mai 2010 13:35

Re: Bestimmten Text unter eine bestimmte Zeile einer Textdat
 
Guten Morgen... :zwinker:

das wirst du wohl nur über Umwege lösen können.

- den Text ab der betreffenden Zeile kopieren ( in Stringlist z.B.) und dann entfernen.
- die betreffende Zeile ans Memo anhängen und den Text zurückkopieren.

performanter dürfte aber die "Vorbereitung" des Textes in einer Stringlist sein und den kompletten Text dem Memo zuordnen.

:hi:

DeddyH 7. Mai 2010 13:45

Re: Bestimmten Text unter eine bestimmte Zeile einer Textdat
 
Wieso nicht einfach Memo.Text per Insert in die Stringliste einfügen?

[edit] Gerade ausprobiert, tut.
Delphi-Quellcode:
var sl: TStringlist;
begin
  sl := TStringlist.Create;
  try
    sl.LoadFromFile(Filename);
    sl.Insert(1,TrimRight(Memo1.Text));
    sl.SaveToFile(Filename);
  finally
    sl.Free;
  end;
end;
[/edit]

himitsu 7. Mai 2010 14:20

Re: Bestimmten Text unter eine bestimmte Zeile einer Textdat
 
Wenn es nur um das Auslesen und Ändern eines Teiles der Datei ginge, dann eventuell
http://www.delphipraxis.net/internal...=695262#695262

Aber wenn die geänderte Datei dann eh komplett in ein Memo rein soll, dann entweder direkt alles im Memo machen
oder wenn viele Zeilen "schnell" eingefügt/gelöscht/geändert werden sollen, dann die Änderungen in einer TStringList machen und danach alles an das Memo übergeben.

haentschman 7. Mai 2010 14:34

Re: Bestimmten Text unter eine bestimmte Zeile einer Textdat
 
ähmmm... :gruebel:

er möchte doch in den Memo Text was mittenreinfügen ... oder interpretiere ich das falsch ?

himitsu 7. Mai 2010 14:37

Re: Bestimmten Text unter eine bestimmte Zeile einer Textdat
 
Hatte verstanden er will was in der Datei einfügen und es auch noch angezeigt haben :gruebel:

DeddyH 7. Mai 2010 14:53

Re: Bestimmten Text unter eine bestimmte Zeile einer Textdat
 
Zitat:

Zitat von Ghostleader
..., wie man einen Text aus einem Memo genau unter ein bestimmte Zeile
einer Textdatei speichern/einfügen kann.

Klingt für mich doch ziemlich eindeutig.

Ghostleader 7. Mai 2010 15:28

Re: Bestimmten Text unter eine bestimmte Zeile einer Textdat
 
Also...
Danke für die vielen schnellen Rückmeldungen. Um es nocheinmal einfacher darzustellen (;D) erkläre ich nochmal mein Problem:
Ich habe ein Memo (meLog) und eine Textdatei.
Der Ort wo die Textdatei liegt und der Text (bzw. mindestens 1 Zeile) sind mir bekannt. (Ich benötige nur 1 Zeile)
Anstatt die Textdatei zu öffnen und an einer bestimmten Stelle in sie hinein zu schreiben, möchte ich genau unter die mir
bekannte Zeile den Text des Memofeldes (meLog) einfügen.
Natürlich gibt es die Lösung einen Text innerhalb eines Memo zu bearbeiten und ich weiß natürlich auch wie das geht...aber das möchte
ich ja gar nicht. Mein Ziel ist es, zb bei einer html-Datei, nicht die ganze Datei nach der richtigen Stelle durchsuchen zu müssen,
sondern mit Delphi einen Text (kein Html-Code) genau an die richtige Stelle [unter die Zeile die ich kenne (-> Kann zb ein Kommentar sein)]
einzufügen.

@DeddyH:
Könntest du mir die Zeile
" sl.Insert(1,TrimRight(Memo1.Text)); "
einmal erläutern?
Meinst du mit der "1" in der Klammer die Zeile "1"?
Das wäre schon ein großer Schritt zur Lösung :)

DeddyH 7. Mai 2010 15:38

Re: Bestimmten Text unter eine bestimmte Zeile einer Textdat
 
Meine Testdatei hatte 2 Zeilen, dazwischen wollte ich den Text des Memos unterbringen. Alles Weitere kanst Du in der Hilfe zu Delphi-Referenz durchsuchenTStrings.Insert nachlesen.

Ghostleader 7. Mai 2010 16:31

Re: Bestimmten Text unter eine bestimmte Zeile einer Textdat
 
Okay, der Index von TString bedeutet also immer dieselbe Zeile. Aber die mir bekannte Zeile verschiebt sich natürlich
jedes mal wenn die Datei geändert wird. Wenn ich eine Zeile hinzufüge, wird alles um 1 Zeile verschoben. Daher suche
ich nach einer Lösung wie man einen Text unter eine Zeile einfügen kann. Ich denke es wäre sehr umständlich immer
wieder die neue Position, den neuen Index der bekannten Zeile herauszufinden. Gibt es da eine andere Lösung?

Danke, mfg
Ghost

himitsu 7. Mai 2010 16:39

Re: Bestimmten Text unter eine bestimmte Zeile einer Textdat
 
Dann mußt du eben die Zeile erstmal suchen und dann in der nachfolgenden Zeile ein Insert ausführen.

Wenn du die komplette Zeile kennst, dann wäre SL.IndexOf eine Lösung.

Delphi-Quellcode:
i := SL.IndexOf('abc');
SL.Insert(i + 1, 'xyz);

Ghostleader 7. Mai 2010 16:46

Re: Bestimmten Text unter eine bestimmte Zeile einer Textdat
 
Gut, danke ich probiers gleich aus

Edit: Hat leider nicht geklappt.

DeddyH 8. Mai 2010 13:02

Re: Bestimmten Text unter eine bestimmte Zeile einer Textdat
 
Hast Du Dir einmal angesehen, was IndexOf macht? Ich vermute, Du suchst nur nach einem Teilstring oder etwas in der Art, deshalb findet IndexOf nichts. Aber das sind alles nur Vermutungen, da Du ja nicht mit Infos herausrückst ("klappt nicht" gilt nicht als Info).

Ghostleader 8. Mai 2010 14:26

Re: Bestimmten Text unter eine bestimmte Zeile einer Textdat
 
Ich kann leider keine Informationen nennen wenn das Ergebnis von IndexOf = nichts war.
Aber, dass Problem hat sich jetzt erledigt. Ich habe eine andere Möglichkeit gefunden es zu lösen.
Danke für die hilfreichen Antworten.

Mfg Ghost

Luciano 10. Mai 2010 10:40

Re: Bestimmten Text unter eine bestimmte Zeile einer Textdat
 
Hallo zusammen,

ich hatte so ein ähnliches Problem. Ich hatte es wie folgt gelöst:

Die Zeile aus dem Memo ist je bekannt, bzw. wo es in die Textdatei rein geschrieben werden soll.

Es gibt einmal Pos und PosEx. Ich hatte die die Zeile der Textdatei herausgesucht und dann noch einmal zum nächsten Zeilenumbruch gesucht. Nach diesem Zeilenumbruch hatte ich dann die Zeile eingefügt.

So ähnlich sieht es bei mir aus. Das soll nur den Weg zeigen, wie ich es bei mir gelöst habe. Vor allem ist meine Textdatei nur 10 Zeilen lang ohne viel Inhalt.
Delphi-Quellcode:
SL.LoadFromFile(GetCurrentDir + PathDelim + cfg);
s := SL.Text;
ipos := Pos('Contact', s);
i2 := PosEx(#13#10, s, ipos);
i2 := i2+1;
s2 := copy(s,0, i2); //Den Text bis zur Position an der eingefügt werden soll in s2 schieben
Insert('PUTSERIAL '+StartingHexAdress + ' ' +NewSn+ #13#10, s2, i2);
SL.Text := s2;
SL.SaveToFile(GetCurrentDir + PathDelim + cfg);
Gruß
Mike

//Oh... das war ja schon erledigt...?!


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz