Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi mehrere Dateien in 1 (https://www.delphipraxis.net/115000-mehrere-dateien-1-a.html)

SaFu 4. Jun 2008 09:03


mehrere Dateien in 1
 
Liste der Anhänge anzeigen (Anzahl: 1)
Mosche

hab immernoch das Problem mit meinen Log Dateien

Und zwar möchte ich jetzt alle inhalte aus allen log datein (bis zu 31) in eine speichern.
Wie stell ich das am besten an??
Hab bist jetzt das hier:

Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
Var sl1 : TStringList;
     sl2 : TStringList;
     i : Integer;
begin
Memo1.Lines.BeginUpdate;
 try
  for I := 1 to 10000 do

  sl1:= TStringList.Create;
  sl1:= TStringList.Create;
  sl1.LoadFromFile(FileListBox1.FileName);

  sl2:= sl1;
  Memo1.Text:= sl2.Text;
 Finally
   Memo1.Lines.EndUpdate;
 end;
end;

Luckie 4. Jun 2008 09:05

Re: mehrere Dateien in 1
 
Und wo ist jetzt dein Problem bzw. wie lautet deine Frage?

Bernhard Geyer 4. Jun 2008 09:07

Re: mehrere Dateien in 1
 
Zitat:

Zitat von fuknersascha
Und zwar möchte ich jetzt alle inhalte aus allen log datein (bis zu 31) in eine speichern.
Wie stell ich das am besten an??

Willst du später noch die Dateien unterscheiden können (-> ZIP-Format und konsorten)

Sharky 4. Jun 2008 09:08

Re: mehrere Dateien in 1
 
Hai fuknersascha,

schaue Dir deine Code noch mal genau an ;-)
Zu erzeugst erst 10 000 x eine Instanz von TStringList (sl1).
Dann erzeugst Du noch einmal ein.
Dann lädst Du Text in sl1.
Und dann weisst Du die Instanz von sl1 der Variablen sl2 zu.

Das sind wohl mehrere Fehler im Code und im Design.

Jelly 4. Jun 2008 09:10

Re: mehrere Dateien in 1
 
Ähm... In deinem Code sind mehr Fehler drin, wie man in so wenig Zeilen überhaupt schreiben kann. Sorry :oops:
  • Um deine For-Schleife fehlt ein begin...end
  • Wieso erzeugst du sl1 zweimal
  • Du lädst (vorausgesetzt die begin-end um die For-Schleife werden gesetzt) 10000 mal das Gleiche in sl1 rein?
  • Mit Memo1.Text wird dein Memo1 jedesmal überschrieben, jedoch nie erweitert

Das sieht mir ziemlich einfach mal so dahingeklatscht aus. Beachte mal meine Punkte, und ich denke du wirst schon ein gutes Stück näher ans Ziel kommen.

Hansa 4. Jun 2008 09:31

Re: mehrere Dateien in 1
 
Jo, mit Verlaub gesagt : dein Quelltext ist Schwachsinn. Na gut, Unfug. :mrgreen: Eventuell wäre zu überlegen, die Dateien einfach aneinanderzuhängen in diesem Stil : copy Datei1 + Datei2 DateiGesamt Kommt die 31 von Tage pro Monat her ?

DeddyH 4. Jun 2008 09:46

Re: mehrere Dateien in 1
 
TFileStream wäre auch noch eine Möglichkeit. IMO zumindest eine bessere als immer wieder in einem Memo Zeilen hinzuzufügen.

taaktaak 4. Jun 2008 09:52

Re: mehrere Dateien in 1
 
Grundsätzliche Frage:
Soll das eine einmalige Reorganisation vorhandener Dateien werden, die inhaltlich nicht verändert werden? Dann im DOS-Fenster mit copy xxx verketten und nix selber machen! Wenn nicht, dann musst du natürlich Delphi bemühen.

SaFu 4. Jun 2008 09:53

Re: mehrere Dateien in 1
 
Zitat:

Zitat von Jelly
Ähm... In deinem Code sind mehr Fehler drin, wie man in so wenig Zeilen überhaupt schreiben kann. Sorry :oops:
  • Um deine For-Schleife fehlt ein begin...end
  • Wieso erzeugst du sl1 zweimal
  • Du lädst (vorausgesetzt die begin-end um die For-Schleife werden gesetzt) 10000 mal das Gleiche in sl1 rein?
  • Mit Memo1.Text wird dein Memo1 jedesmal überschrieben, jedoch nie erweitert

Das sieht mir ziemlich einfach mal so dahingeklatscht aus. Beachte mal meine Punkte, und ich denke du wirst schon ein gutes Stück näher ans Ziel kommen.

ja danke ein paar Fehler habe ich auch schon gesehen versuch das mal umzusetzen

Zitat:

Zitat von Hansa
Jo, mit Verlaub gesagt : dein Quelltext ist Schwachsinn. Na gut, Unfug. :mrgreen: Eventuell wäre zu überlegen, die Dateien einfach aneinanderzuhängen in diesem Stil : copy Datei1 + Datei2 DateiGesamt Kommt die 31 von Tage pro Monat her ?

Es wird für Jeden Tag eine Datei generiert als wenn es 30 Tag sind dann nur 30 Dateien
Zitat:

Zitat von DeddyH
TFileStream wäre auch noch eine Möglichkeit. IMO zumindest eine bessere als immer wieder in einem Memo Zeilen hinzuzufügen.

Das Memo dient immo nur zur meiner Ansicht das schmeis ich später raus und speicher die StringList direkt in einen neue datei

DeddyH 4. Jun 2008 10:13

Re: mehrere Dateien in 1
 
Na gut, mit Stringlisten kannst Du das ja so machen:
- Erzeugen einer "Gesamt"-Stringliste und einer "Teil"-Stringliste
- in einer Schleife Teilliste aus Datei laden und mit AddStrings der Gesamtliste hinzufügen
- Gesamtliste abspeichern
- beide Listen freigeben

SaFu 4. Jun 2008 10:30

Re: mehrere Dateien in 1
 
Ok hab schonmal einige Fehler raus wie offne ich jetzt jede einzelne Datei und übergebe immer die neuen Strings in die Liste

SaFu 4. Jun 2008 10:50

Re: mehrere Dateien in 1
 
Ok mit ein bissel nachdenken hab ich jetzt geschaft

Kann man das auch schneller machen dauert bissel lange bei mir
Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
Var sl1 : TStringList;
     sl2 : TStringList;
     i : Integer;
begin
Memo1.Lines.BeginUpdate;
 try
  sl1:= TStringList.Create;
  sl2:= TStringList.Create;

 for i := 0 to FileListBox1.Items.Count - 1 do
  begin
   sl1.LoadFromFile(FileListbox1.Items[i]);
   sl2.add(sl1.Text);
  end;
  Memo1.Text:= sl2.Text;
 Finally
   memo1.Lines.SaveToFile('c:\test.txt');
   Memo1.Lines.EndUpdate;
 end;
end;

p0w3r5tr34m3r 4. Jun 2008 10:53

Re: mehrere Dateien in 1
 
Delphi-Quellcode:
var
  sl1: TStringlist;
  i: integer;
begin
  memo1.lines.beginupdate;
  try
    sl1 := TStringlist.create;
    for i := filelistbox1.items.count-1 downto 0 do begin
      sl1.loadfromfile(filelistbox1.items[i]);
      memo1.text := memo1.text + sl1.text;
    end;
  finally
    sl1.free;
    memo1.lines.endupdate;
    memo1.savetofile('C:\test.txt');
  end;
end;
is einfach nur runter getippt, sollte aber klappen


MfG

Klaus01 4. Jun 2008 10:56

Re: mehrere Dateien in 1
 
Delphi-Quellcode:
procedure MergeFiles(FileName2add, SumFileName : TFileName) ;
// FileName2add == the name of the first piece of the split file
// SumFileName == the name of the resulting merged file
var
   fs, ss: TFileStream;
   cnt: integer;
begin
   cnt := 1;
   fs := TFileStream.Create(SumFileName, fmCreate or fmShareExclusive) ;
   try
     while FileExists(FileName2add) do
     begin
       ss := TFileStream.Create(FileName2add, fmOpenRead or fmShareDenyWrite) ;
       try
         fs.CopyFrom(ss, 0) ;
       finally
         ss.Free;
       end;
       Inc(cnt) ;
       FileName2add := ChangeFileExt(FileName2add, Format('%s%d', ['._',cnt])) ;
     end;
   finally
     fs.Free;
   end;
end;


Usage:

MergeFiles('c:\mypicture._1','c:\mymergedpicture.bmp') ;
Habe ich hier gefunden.

Grüße
Klaus

SaFu 4. Jun 2008 11:02

Re: mehrere Dateien in 1
 
@Klaus01

ja Danke Klaus den hatte ich auch schon gefunden nur da verstehe ich mal wieder nichts und so habe ich es verstanden.
Wenn ich immer nur abtippe lerne ich nichts und ich laufe gefahr das Ihr irgenwann kein Bock mehr habt auf meine Fragen zu Antworten.

Dank dir trotzdem

DeddyH 4. Jun 2008 11:13

Re: mehrere Dateien in 1
 
Dann versuch es mal so:
Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
Var sl1 : TStringList;
     i : Integer;
begin
  Memo1.Lines.BeginUpdate;
  try
    sl1:= TStringList.Create;
    try
      for i := 0 to FileListBox1.Items.Count - 1 do
        begin
          sl1.LoadFromFile(FileListbox1.Items[i]);
          Memo1.Lines.AddStrings(sl1);
        end;
    finally
      sl1.Free;
    end;
    memo1.Lines.SaveToFile('c:\test.txt');
  finally
    Memo1.Lines.EndUpdate;
  end;
end;
Evtl. vorherige Zeilen mit Memo1.Clear entfernen.

Hansa 4. Jun 2008 11:21

Re: mehrere Dateien in 1
 
Zitat:

Zitat von p0w3r5tr34m3r
[delphi]var
memo1.text := memo1.text + sl1.text;

Das wäre wohl tatsächlich der einfachste und sauberste Weg. Unabhängig von DOS-Befehlen etc. Sehr schwer zitierfähiger Nickname. Mann Mann. :mrgreen:

Muetze1 4. Jun 2008 12:35

Re: mehrere Dateien in 1
 
@fuknersascha: du gibst die Stringlisten Instanzen nicht mehr frei.
@p0w3r5tr34m3r: Dein Code sollte eine Warnung bringen, dass sl1 möglicherweise nicht initialisiert worden ist (wo er Recht hat).
@Hansa: Das wäre zwar einfach, aber unperformant, da er ständig Lines[] -> string und string -> Lines[] bastelt. Dafür gibt es Delphi-Referenz durchsuchenAddStrings(), diese wäre der einfachste und deutliche performantere Weg.

Hansa 4. Jun 2008 14:45

Re: mehrere Dateien in 1
 
Wenn das geht, dann soll er das auch so machen, zumindest anfangen. Antworten sind genug da. :P

SaFu 5. Jun 2008 08:05

Re: mehrere Dateien in 1
 
Zitat:

Zitat von Muetze1
@p0w3r5tr34m3r: Dein Code sollte eine Warnung bringen, dass sl1 möglicherweise nicht initialisiert worden ist (wo er Recht hat).

stimmt mit was und wo Initalisiere ich die Stringlisten

DeddyH 5. Jun 2008 08:08

Re: mehrere Dateien in 1
 
Mit Create vor dem ersten Zugriff :zwinker:

SaFu 5. Jun 2008 08:12

Re: mehrere Dateien in 1
 
Das habe ich schon vor dem 1 Zugriff und auch Create kommt aber immernoch die Meldung
Delphi-Quellcode:
//=====================Dateien aneinander hängen==============================
procedure TForm1.Button5Click(Sender: TObject);
Var sl1 : TStringList;
     sl2 : TStringList;
     i,x : Integer;
begin
 ForceDirectories(JvComputerInfoEx1.Folders.Desktop+ '\'+ExtractFileName(ShellTreeView2.Path)+'_CDR_'+ ComBobox3.Text + '_' + ComboBox1.Text);
 try
  sl1:= TStringList.Create;
  sl2:= TStringList.Create;

 for i := 0 to FileListBox1.Items.Count - 1 do
  begin
   sl1.LoadFromFile(FileListbox1.Items[i]);

   for x := Pred(sl1.Count) downTo 0 do
     begin
      if Trim(sl1[x]) = '' then//or (Trim(sl1[x]) = 'Date') then
       begin
        sl1.Delete(x);
       end;
     end;

    sl2.addStrings(sl1);
    end;
  sl2.SaveToFile (JvComputerInfoEx1.Folders.Desktop+ '\'+ExtractFileName(ShellTreeView2.Path)+'_CDR_'+ ComBobox3.Text + '_' + ComboBox1.Text +'\'+ ComBobox3.Text+'_'+ ComboBox1.Text+'.log');
 Finally
  sl2.Free;
  Sl1.Free;
 end;
 Button6.Click;
end;

DeddyH 5. Jun 2008 08:15

Re: mehrere Dateien in 1
 
Setz das try mal weiter nach hinten.
Delphi-Quellcode:
sl1:= TStringList.Create;
sl2:= TStringList.Create;
try
...

SaFu 5. Jun 2008 08:18

Re: mehrere Dateien in 1
 
uuupppsss

Danke das wars falls jemand noch ne Verbesserung hat bin ich gerne offen aber hab noch ne andere Frage schreib ich aber in den berits schon offenem Post


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz