Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Anfänger braucht Hilfe (https://www.delphipraxis.net/8464-anfaenger-braucht-hilfe.html)

Ringer 5. Sep 2003 08:42


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:
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;
mfg

Ringer

Billa 5. Sep 2003 08:47

Re: Anfänger braucht Hilfe
 
Hallo!

...es könnte klappen, wenn Du i in eine Zeichenkette umwandelst!

Delphi-Quellcode:
    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;
Gruß
Billa

Ringer 5. Sep 2003 08:55

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

Billa 5. Sep 2003 09:06

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

Ringer 5. Sep 2003 09:18

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:
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;
Gruß

Ringer

Billa 5. Sep 2003 09:21

Re: Anfänger braucht Hilfe
 
Hallo,

vielleicht sehe ich es nicht aber Du referenzierst doch die f.Zeile, oder?

Delphi-Quellcode:
     ts_main.add(ts.strings[f]); <------
Ich denke jede Datei und damit ts enthält jeweils nur eine Zeile?

Gruß Billa

Ringer 5. Sep 2003 09:26

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

Billa 5. Sep 2003 09:39

Re: Anfänger braucht Hilfe
 
Hallo,

was klappt denn nicht? (Fehlermeldung?)

Gruß
Billa

Ringer 5. Sep 2003 09:41

Re: Anfänger braucht Hilfe
 
Ist immernoch die gleiche Fehlermeldung!

Also "Listenindex überschreitet das Maximum(1)"

Ringer

Billa 5. Sep 2003 09:44

Re: Anfänger braucht Hilfe
 
Hallo,

du referenzierst immer noch auf eine Zeile f, die gar nicht vorhanden ist

Delphi-Quellcode:
      f:=f+1;
      ts.LoadFromFile('C:\file'+IntToStr(i)+'.txt');
      if ts.Count > 0 then
        begin
        ts_main.add(ts.strings[f]);
        end;
      end;
lass doch einfach f erstmal weg und benutze ts.strings[0] !

Ringer 5. Sep 2003 09:51

Re: Anfänger braucht Hilfe
 
Ok die Kogik scheint nicht zu stimmen :cry: . Aber wenn ich nur

Delphi-Quellcode:
ts.strings[0]
schreibe, wird nur der Inhalt der 1 Datei je nach Anzahl der Schleifenläufe in die Hauptdatei geschrieben!

Ringer

Ringer 5. Sep 2003 09:54

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

Tpercon 5. Sep 2003 09:58

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:
ts.Strings[0]
richtig.
Daher der komplette Code (ungetestet):
Delphi-Quellcode:
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;
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).

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.

Billa 5. Sep 2003 10:05

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;

Ringer 5. Sep 2003 10:05

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

Billa 5. Sep 2003 10:12

Re: Anfänger braucht Hilfe
 
@Typercoon: Sorry, ich wollte Dich wirklich nicht kopieren! Aber Du warst wohl einfach schneller :hello:

Tpercon 5. Sep 2003 10:14

Re: Anfänger braucht Hilfe
 
Zitat:

Zitat von Billa
@Typercoon: Sorry, ich wollte Dich wirklich nicht kopieren! Aber Du warst wohl einfach schneller :hello:

Kein Problem. :D


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