Autor |
Beitrag |
playsta
      
Beiträge: 24
|
Verfasst: Mo 02.02.09 15:26
Also ich habe das Problem das ich zu erst eine Textdatei einlesen muss .Diese soll dann vom Programm so bearbeitet werden das ein Teil dieser Textdatei durch die Eingabe die in einem Memo feld getätigt wurde ersetzt wird.
danke im vorraus;)
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 02.02.09 15:27
Und was ist Deine Frage? 
|
|
playsta 
      
Beiträge: 24
|
Verfasst: Mo 02.02.09 15:30
Die Frage ist wie ich genau vorgehen kann und mit welchen Befehlen ich da am besten arbeiten kann..
Dabei zu berücksichtigen ist das meine Delphikenntnisse wie man vllt merkt relativ begrenzt sind 
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 02.02.09 15:36
Dieser "Teil der Textdatei" ist aber fix (Zeilennummer)? Oder muss die Zeile anhand des Inhalts erst ermittelt werden? Mehr Infos bitte.
|
|
playsta 
      
Beiträge: 24
|
Verfasst: Mo 02.02.09 15:39
Also der Teil der Textdatei ist fix also man kann ihn über die Zeile angeben
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 02.02.09 15:45
Und wenn das Memo weniger Zeilen enthält als die Textdatei ab der genannten Zeile, sollen die restlichen Zeilen erhalten bleiben? Beispiel:
Datei
Quelltext 1: 2: 3: 4: 5:
| Erste Zeile Zweite Zeile Dritte Zeile Vierte Zeile Fünfte Zeile |
Memo
Quelltext 1: 2:
| Neue Zweite Zeile Neue Dritte Zeile |
Was soll mit den Zeilen 4 und 5 in der Datei geschehen?
|
|
playsta 
      
Beiträge: 24
|
Verfasst: Mo 02.02.09 15:48
Ja die restlichen müssen erhalten bleiben .
Es soll also nur diese eine Zeile dann ersetzt werden .
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 02.02.09 16:15
Am einfachsten wird eine TStringList sein. Die erstellst du, dann lädst du die Datei mit LoadFromFile. Danach ersetzt du die Zeilen, speicherst die Datei wieder und entfernst die TStringList aus dem Speicher.
Ein kleiner Einstieg: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var i: Integer; FileContents: TStringList; begin FileContents := TStringList.Create;
FileContents.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Datei.txt'); FileContents.LoadFromFile(OpenDialog1.FileName); for i := 0 to Memo1.Lines.Count - 1 do ShowMessage('Ersetzen: ' + FileContents[i + StartZeileInDerDatei]);
FileContents.SaveToFile(... FileContents.Free; |
|
|
playsta 
      
Beiträge: 24
|
Verfasst: Mo 02.02.09 16:59
Ok danke über zeile klappt, jetzt bräuchte ich das gleiche jedoch noch zeilenunabhängig, sodass man also die Zeilen nach dem Inhalt ermitteln muss.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 02.02.09 17:13
Das ginge z.B. mit TStringlist.IndexOf (bei exakter Übereinstimmung).
|
|
playsta 
      
Beiträge: 24
|
Verfasst: Mo 02.02.09 17:53
ok.. und bei nicht exakter Übereinstimmung?
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 02.02.09 18:00
Dann müsstest Du in einer Schleife durchgehen und nach Übereinstimmungen suchen (z.B. mit der Pos-Funktion).
|
|
playsta 
      
Beiträge: 24
|
Verfasst: Mo 02.02.09 18:18
Ok ich versuch es mal aber weitere Tipps oder Vorschläge sind immer herzlich willkommen;)
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 03.02.09 03:12
Du könntest auch direkt im gesamten Text danach suchen. Bei einer StringList FileContents wäre das FileContents.Text. Darin kannst du mit Pos auch direkt suchen.
Die Frage ist was du jetzt eigentlich genau machen willst. An einer durch einen enthaltenen Text bestimmten Stelle einen anderen Text einfügen?
Ist der gesuchte Text ein spezieller Platzhalter, der eindeutig in der Datei ist und komplett ersetzt werden soll z.B.?
|
|
playsta 
      
Beiträge: 24
|
Verfasst: Di 03.02.09 10:26
ja es ist wie ein platzhalter.
Um es mit einem Beispiel zu erklären könnte man es so sagen :
Wir ich habe ein formular zb. einen Fehlerprotokoll oder eine Meldung das die angewendedete Anwendung nicht länger ausgeführt werden kann .
Dann soll über ein Memofeld ein Text angegeben werden in den man zB. dann einen eigenen Kommentar dazu abgeben kann.
|
|
playsta 
      
Beiträge: 24
|
Verfasst: Di 03.02.09 11:19
Aber zwischendurch nochmal eine vllt ziemlich banale Frage.
Wie öffne ich die neu gespeicherte *.txt- datei dann das sie direkt nach dem einsetzen der neuenAngabe angeeigt wird?
|
|
jojo-sp
      
Beiträge: 317
Windows XP Prof, Vista Ultimate & Home Premium, Windows 7
Delphi 7 Enterprise, Delphi 2009
|
Verfasst: Di 03.02.09 11:35
Es besteht ja auch die Möglichkeit zwei Strings mit dem Levenshtein Verfahren zu vergleichen. Dann müssen die Zeilen nicht Wort für Wort übereinstimmen. Du musst dann die Datei bzw. Stringlist Zeilenweise abklappern und die beste Übereinstimmung ermitteln. Schau dir mal folgenden Link an:
www.delphipraxis.net...t=levenshteindistanz
MfG Johannes
_________________ Ist der Ruf erst ruiniert, lebts sich gänzlich ungeniert...
Wilhelm Busch (1832 - 1908)
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 03.02.09 11:41
playsta hat folgendes geschrieben : | ja es ist wie ein platzhalter. |
Dann kannst du mit Pos auf FileContents.Text angewendet die Position feststellen.
Der neue Inhalt ist dann FileContents.Text von Buchstabe 1 bis zu der Position - 1 plus dein Memo-Text plus FileContents.Text von Position + Länge des Platzhalters bis zum Ende. Das kannst du also mit zweimal Copy lösen.
playsta hat folgendes geschrieben : | Wie öffne ich die neu gespeicherte *.txt- datei dann das sie direkt nach dem einsetzen der neuenAngabe angeeigt wird? |
Memo1.Lines.LoadFromFile
|
|
playsta 
      
Beiträge: 24
|
Verfasst: Di 03.02.09 12:02
Ok danke versuch ich es erst mal so mit FileContents.Text.
Falls ihr aber noch weitere Ideen in richtung Quelltext direkt habt hscreibtse ruhig;)
|
|
playsta 
      
Beiträge: 24
|
Verfasst: Di 03.02.09 12:15
Da ich blutiger Anfänger bin hab ich noch Probleme das irgendwie in Quelltext umzusetzen ,kann mir das jemand vllt in Quelltext oder zumindestens einen Teil davon in Quelltext darstellen damit ich zuminest wirklich weiß wie ich anfangen soll?
|
|