![]() |
Anfänger braucht Hilfe
Hallo Zusammen,
ich habe gestern folgendes Problem ins Forum gestellt. Ich habe mehrere Dateien file1.txt, file2.txt usw. diese haben immer eine Zeile mit Informationen (wert1,wert2...). Nun will ich diese Informationen in einer "grossen" Textdatei zusammenfassen. Ich habe mir folgenden code überlegt aber er scheidert schon daran das ich die Dateinamen in einer Schleife erstellen will. Aber ich denke der Grundgedanke dürfte klar sein :?: . Ich als Anfänger bitte daher um etwas Hilfe :!: .
Delphi-Quellcode:
mfg
procedure TTest_1.Button5Click(Sender: TObject);
var ts_main, ts: TStringList; i : Integer; begin ts_main := TStringList.Create; try ts := TStringList.Create; try for i:= 1 to 20 do begin if fileExists('C:\file'+i+'.txt') then ts.LoadFromFile('C:\file'+i+'.txt'); if ts.Count > 0 then begin ts_main.Add(ts.strings[i]); end; end; finally ts.Free; end; ts_main.SaveToFile('C:\files.txt'); finally ts_main.Free; end; Ringer |
Re: Anfänger braucht Hilfe
Hallo!
...es könnte klappen, wenn Du i in eine Zeichenkette umwandelst!
Delphi-Quellcode:
Gruß
for i:= 1 to 20 do
begin if fileExists('C:\file'+IntToStr(i)+'.txt') then ts.LoadFromFile('C:\file'+IntToStr(i)+'.txt'); if ts.Count > 0 then begin ts_main.Add(ts.strings[i]); end; end; Billa |
Re: Anfänger braucht Hilfe
Danke erstmal! Wieder einen neuen Befehl gelernt :D . Wenn ich das "Programm" aber ausführe sagt er "Listenindex überschreitet das Maximum(1)". Was bedeutet das nun wieder :?: .
Ringer |
Re: Anfänger braucht Hilfe
Hallo,
Delphi-Quellcode:
try
for i:= 1 to 20 do begin if fileExists('C:\file'+i+'.txt') then ts.LoadFromFile('C:\file'+i+'.txt'); if ts.Count > 0 then begin ts_main.Add(ts.strings[i]); end; end; finally Du willst bis zu 20 Dateien lesen. Soweit Ok! Beim Einlesen aber benutzt Du den Dateienzähler als Zeilenindex, obwohl Du nicht weißt, ob z.B. bei der Datei Nr. 17 überhaupt 17 Zeilen vorhanden sind! Trenne Zeilenzähler und Dateizähler, dann wird's auf alle Fälle besser! Gruß Billa |
Re: Anfänger braucht Hilfe
Danke! Aber ich habe das jetzt getrennt und es funktioniert immer noch nicht! (Sicherlich ist aber die Trennung sinnvoll!) Allerdings verwirrt mich deine Aussage:
>Du willst bis zu 20 Dateien lesen. Soweit Ok! Beim Einlesen aber >benutzt Du den Dateienzähler als Zeilenindex, obwohl Du nicht weißt, >ob z.B. bei der Datei Nr. 17 überhaupt 17 Zeilen vorhanden sind! Denn in jeder Datei ist nur eine Zeile und die Enddatei hat genauso viele Eintragszeilen wie es Dateien gibt.
Delphi-Quellcode:
Gruß
procedure TTest_1.Button5Click(Sender: TObject);
var ts_main, ts: TStringList; i ,f: Integer; begin f:=0; ts_main := TStringList.Create; try ts := TStringList.Create; try for i:= 1 to 5 do begin if fileExists('C:\file'+IntToStr(i)+'.txt') then f:=f+1; ts.LoadFromFile('C:\file'+IntToStr(i)+'.txt'); if ts.Count > 0 then begin ts_main.add(ts.strings[f]); end; end; finally ts.Free; end; ts_main.SaveToFile('C:\files.txt'); finally ts_main.Free; end; end; Ringer |
Re: Anfänger braucht Hilfe
Hallo,
vielleicht sehe ich es nicht aber Du referenzierst doch die f.Zeile, oder?
Delphi-Quellcode:
Ich denke jede Datei und damit ts enthält jeweils nur eine Zeile?
ts_main.add(ts.strings[f]); <------
Gruß Billa |
Re: Anfänger braucht Hilfe
OK, dann hast du es richtig und ich deine Aussage falsch verstanden :D . Allerdings funktioniert es jetzt immer noch nicht :cry: .
Ringer |
Re: Anfänger braucht Hilfe
Hallo,
was klappt denn nicht? (Fehlermeldung?) Gruß Billa |
Re: Anfänger braucht Hilfe
Ist immernoch die gleiche Fehlermeldung!
Also "Listenindex überschreitet das Maximum(1)" Ringer |
Re: Anfänger braucht Hilfe
Hallo,
du referenzierst immer noch auf eine Zeile f, die gar nicht vorhanden ist
Delphi-Quellcode:
lass doch einfach f erstmal weg und benutze ts.strings[0] !
f:=f+1;
ts.LoadFromFile('C:\file'+IntToStr(i)+'.txt'); if ts.Count > 0 then begin ts_main.add(ts.strings[f]); end; end; |
Re: Anfänger braucht Hilfe
Ok die Kogik scheint nicht zu stimmen :cry: . Aber wenn ich nur
Delphi-Quellcode:
schreibe, wird nur der Inhalt der 1 Datei je nach Anzahl der Schleifenläufe in die Hauptdatei geschrieben!
ts.strings[0]
Ringer |
Re: Anfänger braucht Hilfe
Ich denke das Problem ist das ich die ts StingList zu spät leere! Aber wenn ich sie zeitiger leere und eine Datei fehlt kann er keinen String anhängen da add anscheinend nicht bei leeren Strings geht!
Gruß Ringer |
Re: Anfänger braucht Hilfe
Nein ts.Strings hat nach jedem einzelnen Schleifendurchlauf doch nen anderen Wert, da darin ja die erste Zeile der geladenen Datei steht.
Daher ist
Delphi-Quellcode:
richtig.
ts.Strings[0]
Daher der komplette Code (ungetestet):
Delphi-Quellcode:
Eleganter wäre es aber, wenn du mit Hilfe von FindFirst, FindNext bzw. dder CodeLibary alle Dateinamen in dem Verzeichnis holst. So, kannst du ja maximal 20 Dateien laden (auf Grund der Begrenzung der Schleife).
procedure TTest_1.Button5Click(Sender: TObject);
var ts_main, ts: TStringList; i: Integer; begin ts_main := TStringList.Create; try ts := TStringList.Create; try for i:= 1 to 5 do begin if fileExists('C:\file'+IntToStr(i)+'.txt') then begin ts.LoadFromFile('C:\file'+IntToStr(i)+'.txt'); if ts.Count > 0 then begin ts_main.add(ts.strings[0]); end; end; end; finally ts.Free; end; ts_main.SaveToFile('C:\files.txt'); finally ts_main.Free; end; end; Wie ich sehe, hattest du also gestern doch nch gar nichts gemacht! Denn du meintest das Einlesen wäre kein Problem, nur das Zusammenfügen. |
Re: Anfänger braucht Hilfe
Hallo,
eigentlich wollte ichs ja nicht tun....aber hier ist Code, der anscheinend funktioniert
Delphi-Quellcode:
try ts_main := TStringList.Create; try ts := TStringList.Create; for i:= 1 to 5 do if fileExists('C:\file'+IntToStr(i)+'.txt') then begin ts.LoadFromFile('C:\file'+IntToStr(i)+'.txt'); if ts.Count > 0 then ts_main.add(ts.strings[0]); end; finally ts.Free; end; ts_main.SaveToFile('C:\files.txt'); finally ts_main.Free; end; |
Re: Anfänger braucht Hilfe
Supper funzt! Habe gestern schon noch was gemacht aber irgendwie wollte es halt nicht klappen! Ausserdem bin ich wirklich noch ein totaler Anfänger :!: und habe zu allem Überfluß auch noch Zeitdruck :!:
Daher danke! Grüße Ringer |
Re: Anfänger braucht Hilfe
@Typercoon: Sorry, ich wollte Dich wirklich nicht kopieren! Aber Du warst wohl einfach schneller :hello:
|
Re: Anfänger braucht Hilfe
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:17 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