Autor |
Beitrag |
Dark-§hadow
      
Beiträge: 24
|
Verfasst: Mi 12.09.07 23:50
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
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: 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
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
Zuletzt bearbeitet von freak4fun am Mi 12.09.07 23:55, insgesamt 1-mal bearbeitet
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 12.09.07 23:53
Schau mal nach Pos und Copy. Damit solltest Du weiter kommen.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Dark-§hadow 
      
Beiträge: 24
|
Verfasst: 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
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Do 13.09.07 00:07
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
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: 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...
Zuletzt bearbeitet von jaenicke am Do 13.09.07 00:12, insgesamt 1-mal bearbeitet
|
|
Dark-§hadow 
      
Beiträge: 24
|
Verfasst: 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 
      
Beiträge: 24
|
Verfasst: 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
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 13.09.07 00:28
|
|
Dark-§hadow 
      
Beiträge: 24
|
Verfasst: 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
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: 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.  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
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
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: 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 
      
Beiträge: 24
|
Verfasst: 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(
Einloggen, um Attachments anzusehen!
|
|
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: 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 
      
Beiträge: 24
|
Verfasst: Do 13.09.07 00:59
der gemeinte Fehler besteht jedoch weiterhin =/
|
|
freak4fun
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Do 13.09.07 01:32
Hast du irgendwo:
Delphi-Quelltext
stehen?
MfG
freak
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
Dark-§hadow 
      
Beiträge: 24
|
Verfasst: 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
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Do 13.09.07 01:38
Ich mach extra für dich mal meinen Rechner mit Delphi an. 
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
Michael Stenzel
      
Beiträge: 133
D3 Prof, D7 PE
|
Verfasst: 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
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Do 13.09.07 01:53
Der Michael hat recht., wobei ich FreeAndNil(Liste); benutzen würde.
MfG
freak
Einloggen, um Attachments anzusehen!
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
|