Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - .txt einlesen, string bearbeiten
Dark-§hadow - Mi 12.09.07 23:50
Titel: .txt einlesen, string bearbeiten
Hallo Zusammen!
Ich versuche bzw. sucher derzeit folgendes:
Das Programm soll
-Eine .txt einlesen
-jede Zeile scannen und nach dem Doppelpunkt alles in der Zeile löschen
-In eine neue .txt einspeichern (meinetwegen eingelesen: bla.txt ausgabe: bla_bearbeitet.txt
Könnte mir hierfür jemand vielleicht schnell Hilfestellung geben? Ich habe mich noch nie an Text-und Stringverarbeitung vergriffen und bräuchte dieses Programm nun kurzfristig.
Beispiel bla.txt:
123.3435.123 :55
123.453.123 :2000
==> Bla_bearbeitet.txt
123.3435.123
123.453.123
MfG
Dark-§hadow
Moderiert von
Christian S.: Topic aus VCL (Visual Component Library) verschoben am Mi 12.09.2007 um 23:53
freak4fun - Mi 12.09.07 23:53
An welcher Stelle kommst du nicht weiter bzw. was hast du schon? :)
Edit:
Zerlege dein Problem in Teilprobleme.
1. Textdatei öffnen.
2. Zeile auslesen.
3. Doppelpunkt suchen.
4. Text hinter Doppelpunkt löschen.
5. Textdatei speichern.
MfG
freak
Christian S. - Mi 12.09.07 23:53
Schau mal nach Pos und Copy. Damit solltest Du weiter kommen.
Dark-§hadow - Do 13.09.07 00:02
Also ich habe bereits das Einlesen ^^
Var
Liste :TStringList;
und dann hab ich noch...
Liste.Loadfromfile('bla.txt'); (wobei es mir lieber wäre, würde man ein lib-Überblick bekommen, und die .txt raussuchen)
Mein Problem ist erstmal, dass er jede Zeile durchläuft, nach : sucht und (mit :) alles, was in der zeile noch folgt, einfach löscht.
//Edit@Freak4Fun: Das Speichern wird auch kein Problem denke ich (Liste.SavetoFile('bla_bearbeitet.txt'));
freak4fun - Do 13.09.07 00:07
Dark-§hadow hat folgendes geschrieben: |
Also ich habe bereits das Einlesen ^^
Var
Liste :TStringList; |
Das ist doch schonmal ein Anfang. ;)
Dark-§hadow hat folgendes geschrieben: |
Liste.Loadfromfile('bla.txt'); (wobei es mir lieber wäre, würde man ein lib-Überblick bekommen, und die .txt raussuchen) |
Du kannst zum Beispiel den OpenDialog benutzen:
Delphi-Quelltext
1: 2:
| if Opendialog1.Execute then mytxt := Opendialog1.Filename; |
Dark-§hadow hat folgendes geschrieben: |
Mein Problem ist erstmal, dass er jede Zeile durchläuft, nach : sucht und (mit :) alles, was in der zeile noch folgt, einfach löscht. |
In der Stringlist sind nun Strings, die du über eine Schleife ansprechen kannst.
Delphi-Quelltext
1: 2: 3: 4: 5:
| for i := 0 to Liste.Count - 1 do begin Liste.Strings[i] ... end; |
Ich hoffe das hilft dir weiter. ;)
MfG
freak
jaenicke - Do 13.09.07 00:11
Erstens: Nimm keine relativen Verzeichnisse, das gibt nur Probleme, weil das das aktuelle Arbeitsverzeichnis benutzt und wenn dieses nicht das deiner Anwendung ist, wäre das schlecht, wenn die Datei dort liegt, was aber mit einem TOpenDialog kein Problem ist, denn das Aussuchen der Datei kannst du mit einem TOpenDialog machen, damit kann der Benutzer eine Datei auswählen.
Dann zur zeilenweisen Analyse: Weißt du was eine for-Schleife ist? Damit geht das.
// Ich seh gerade, dass da schon eine Antwort mit Beispiel kommt, da kann ich mir das sparen^^
Zur Analyse der Zeile selbst hat
Christian S. ja schon die Befehle gepostet, wenn du die nicht verstehst, dann frag bitte. Denn wenn du verstanden hast, was die machen, könntest du es auch hinbekommen.
Ansonsten poste einfach wieder den Quelltext wie weit du gekommen bist und was du z.B. an den Befehlen Pos und Copy nicht verstehst...
Dark-§hadow - Do 13.09.07 00:12
Ja, danke auf jeden Fall, aber den eigentlichen Qu, wofür ich die Hilfe brauch, ist ja des Suchen & Löschen, des bekomm ich wie gesagt nicht hin.
Dark-§hadow - Do 13.09.07 00:24
Also das aktuelle Arbeitsverzeichnis ermittelt man mit folgendem Befehl:
Delphi-Quelltext
1:
| openDialog.InitialDir := GetCurrentDir; |
Natürlich weiß ich, was eine For-Schleife ist ;) in dem Fall wird zum integer i:= 0
immer ein Zähler hinzugefügt, bis er alle Reihen (Liste.Count) durch hat. Nur stehe ich immer noch vor dem Pos- und CopyProblem.
Position ermittelt die Position, die speichert man dann i-wo in eine Zwischenvariable, dann soll mit copy ab da alles gelöscht werden... x_X helft mir bitte
//Edit: Entschuldigt den Doppelpost.
Moderiert von
Klabautermann: Delphi-Tags hinzugefügt.
jaenicke - Do 13.09.07 00:28
Das stimmt bis
Dark-§hadow hat folgendes geschrieben: |
dann soll mit copy ab da alles gelöscht werden... |
;-)
Es reicht den gewünschten Teil herauszukopieren ;-).
Delphi-Quelltext
1:
| ZweiteStringList[i] := Copy(ErsteStringList[i], 1, Pos('Trennmarkierung', ErsteStringList[i]) - 1); |
Dark-§hadow - Do 13.09.07 00:35
Jaenicke kommentierst du vielleicht nochmal deinen meisterhaften Befehl? ;) Verstanden hab ich ihn zu 90% schon, aber da fehlen noch 10 ^^
Desweiteren taucht folgendes Problem beim versuchten Einlesen auf
Delphi-Quelltext
1: 2: 3:
| if Opendialog1.Execute then mytxt := Opendialog1.Filename; Liste.Loadfromfile(mytxt); |
Mit Verweis auf Liste.Loadfromfile (mytxt);
Was mach ich falsch? =(
Moderiert von
Christian S.: Delphi-Tags hinzugefügt
freak4fun - Do 13.09.07 00:38
Bitte nimm dir etwas mehr Zeit zum Erstellen deiner Antworten/Posts. Ich weiß teilweise nicht was du willst. Auch sind deine Posts ungenau und teilweise unvollständig. :twisted: Du erwatest von uns auch aussagekräftige Antworten. ;)
Edit:
Gehe mit dem Mauscurser auf das Wort "Copy" in deinem Quelltext und drück F1. ;)
MfG
freak
jaenicke - Do 13.09.07 00:43
Die von mir gepostete Zeile macht folgendes:
Pos('Trennmarkierung', ErsteStringList[i]) gibt dir ja die Position von 'Trennmarkierung' im der i-ten Zeile der ersten Stringliste zurück. Copy kopiert alles aus dem angegebenen String von der ersten Stelle bis zur zweiten Stelle, in diesem Fall von Buchstabe eins bis Buchstabe Pos('Trennmarkierung', ErsteStringList[i]) - 1, was ja das Zeichen vor der Trennstelle ist.
Genau das willst du ja in der neuen StringList in der Zeile i haben, also packst du das noch da hin.
Ach so: Bitte poste auch die Fehlermeldungen... Ich vermute mal, dass du mytxt nicht als String-Variable deklariert hast...
Dark-§hadow - Do 13.09.07 00:46
Nur für dich, freak4fun, damit du genau den Fehler siehst, hab ich mal das Projekt geuppt und angehangen. Der Fehler wird in keinster Weis verziert, beschriftet o.ä....soweit ich das seh zumindest nicht x(
jaenicke - Do 13.09.07 00:48
Unterhalb des Quelltextes sollte eigentlich eine Beschreibung des Fehlers kommen ;-). Aber ich sehs mir mal an...
// EDIT: Ich sehs schon... der dritte Befehl gehört nicht mehr zu if, das muss
Delphi-Quelltext
1: 2: 3: 4: 5:
| if Opendialog1.Execute then begin mytxt := Opendialog1.Filename; Liste.Loadfromfile(mytxt); end; |
sein.
Dark-§hadow - Do 13.09.07 00:59
der gemeinte Fehler besteht jedoch weiterhin =/
freak4fun - Do 13.09.07 01:32
Hast du irgendwo:
stehen?
MfG
freak
Dark-§hadow - Do 13.09.07 01:36
Nochmals extra für dich =P
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| var openDialog1 : TOpenDialog; Liste :TStringList; Liste2 :Tstringlist; Form1: TForm1;
procedure TForm1.Button1Click(Sender: TObject); var i :integer; mytxt : string; begin if Opendialog1.Execute then begin mytxt := Opendialog1.Filename; Liste.Loadfromfile(mytxt); end; for i := 0 to Liste.Count - 1 do begin Liste.Strings[i]; liste2[i] := Copy(Liste[i], 1, Pos(';', Liste[i]) - 1); end; end;
procedure TForm1.FormCreate(Sender: TObject); begin openDialog1 := TOpenDialog.Create(self); end; |
==> Jaaah, hab ich ^^
Moderiert von
Christian S.: Delphi-Tags hinzugefügt
freak4fun - Do 13.09.07 01:38
Ich mach extra für dich mal meinen Rechner mit Delphi an. ;)
Michael Stenzel - Do 13.09.07 01:44
Hi.
Erzeugst Du den die Stringlisten mit
Delphi-Quelltext
1: 2: 3: 4:
| ... Liste := TStringList.Create; Liste2 := TStringList.Create; ... |
?
Wenn nicht , hast Du den Fehler Schon gefunden.
Vergesse nicht, die Listen wieder zu löschen mit
Delphi-Quelltext
1: 2: 3: 4:
| ... Liste.Free; Liste2.Free; ... |
Gruß
Michael
freak4fun - Do 13.09.07 01:53
Der Michael hat recht., wobei ich FreeAndNil(Liste); benutzen würde.
MfG
freak
Dark-§hadow - Do 13.09.07 01:59
Vielen Dank für die schnelle Hilfe =)
freak4fun - Do 13.09.07 02:09
Immer wieder gerne. :) Wenn der Fragensteller nett und freundlich bleibt macht das Antworten mehr Spaß. ;)
MfG
freak
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!