Announcement

Collapse
No announcement yet.

txt Dateien zusammenführen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • txt Dateien zusammenführen

    ich suche über einen Filter dateien und liste sie in einer FileListBox1 auf. nun lege ich eine neue Datei an und will den Inhalt der 1, 2 usw. Datei
    in die neue Datei kopieren. wie kann ich das am besten machen. unter dos konnte ich sie so zusammenführen datei1+datei2+datei3.

    Danke euch,

    Maik

  • #2
    Hallo Maik,

    also auf die simple und brachiale Art würde ich es mal mit TStringList versuchen. Lade jede einzelne Textdatei (ich gehe davon aus es handelt sich um Textdateien) in je eine StringList (LoadFromFile). Dann hänge an die erste Liste die zweite mit Append an (natürlich für jeden String innerhalb einer for Schleife) mache das gleiche mit der dritten Liste usw. bis auch die letzte Liste an der ersten hängt, speichere die erste StringList ab (SaveToFile) und fertig.

    Etwas eleganter und schneller und ressourcenschonender ist es aber wohl die Dateien sequentiell zu lesen und dann gleich sequentiell zu schreiben, solange bis alle Dateien in der geschriebenen sind. Nutze dafür die guten alten BlockRead und BlockWrite-Funktionen. (Die gabs schon bei TURBO Pascal 3 für CP/M). Musst dafür halt ein bisschen mehr von Hand machen als bei der o.g. 'modernen Lösung'. Und dann gibts da noch FileRead und FileWrite. (Ähnlich den Blockweise arbeitenden funktionen, sollten aber nicht vermischt werden.)

    Na ja, soviel erst mal so aus dem Stand...

    Comment


    • #3
      ich habe mich jetzt für die Möglichkeit entschieden. leider hat sie einen fehler. beim zweiten durchlauf bleibt sie beim assignFile(f1,name), mit der Fehlermeldung 103 stehen(datei nicht geöffnet). Kann mir bitte einer sagen wo mein fehler ist.

      Danke Euch,

      MAik

      for i := 0 to (FileListBox1.Items.Count - 1) do begin <br>
      try<br>
      name:=FileListBox1.Items.Strings[i];<br>
      AssignFile(F1,name);<br>
      Reset(F1);<br>
      {$I+}<br>
      AssignFile(F2, edit1.text);<br>
      if IOResult <> 0 then rewrite(F2, edit1.text);<br>
      {$I-}<br>
      append(f2);<br>
      while not Eof(F1) do<br>
      begin<br>
      Read(F1, Ch);<br>
      Write(F2, Ch);<br>
      end;<br>
      CloseFile(F1);<br>
      CloseFile(F2);<br>
      finally<br>
      { weitere Programmschritte }<br>
      end;<br>
      end;<br&gt

      Comment


      • #4
        <p>Hallo Maik,<br>
        <br>
        <pre>
        <p>
        var s:String;

        ...
        AssignFile(F1, name);
        Reset(F1);

        AssignFile(F2, Edit1.Text);

        while not Eof(F1) do
        begin
        ReadLn(F1, s);
        Append(F2);
        WriteLn(F2, s);
        end;

        CloseFile(F2);
        CloseFile(F1);
        ...
        </p>
        </pre>
        <br>
        Gruß Thomas<br></p&gt

        Comment


        • #5
          Hallo Thomas,

          ich bekomme die Dateinamen über FileListBox1.Items.Strings[i]. Die erste Datei öffnet er richtig. Will ich aber die zweite Datei öffen, bringt er mir die Fehlermeldung E/A 103 (an dieser Stelle Reset(F1). Wo liegt der Fehler?

          Gruß,

          Mai

          Comment


          • #6
            <p>Hallo Maik,<br>
            <br>
            der Fehler 103 bedeutet, dass die Datei noch nicht geöffnet ist.<br>
            <br>
            Wenn es Dir nichts ausmacht, sende mir Deinen Code an folgende Adresse:<br>
            <pre>
            <p>
            "[email protected]"
            </p>
            </pre>
            Ich hoffe, ich kann Dir dann helfen.<br>
            <br>
            Gruß Thomas<br></p&gt

            Comment

            Working...
            X