Autor Beitrag
omega123
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: So 12.01.03 14:03 
servus

habe eine txt datei, mit über 2000 und mehr zeilen

jetzt nöchte ich diese 2000 zeilen in mehrere dateien aufteilen (so ca. 300zeilen pro datei)

danke für die hilfe
Mari
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: So 12.01.03 18:06 
Also, ich hab das ganze jetzt mal probiert. Allerding hatte meine Datei genau 3000 Zeilen, mit 300 Zeilen pro Datei geht es dan auf. Wie es allerdings bei krummen Zahlen ist habe ich noch nicht probiert


ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.Button1Click(Sender: TObject);
var f:Array of textfile;
    i,j:Integer;
    datei:tstringlist;
    zeilen,dateien:Integer;
begin
datei := tstringlist.create;
datei.LoadFromFile('textdatei.txt');
zeilen := datei.count;
dateien := zeilen div 300;
setlength(f,dateien);
for i := 0 to dateien-1 do
begin
assignfile(f[i],'Datei'+inttostr(i)+'.txt');
rewrite(f[i]);
 for j := 1 to 300 do
  begin
   writeln(f[i],datei.strings[i*300+j-1]);
  end;
closefile(f[i]);
end;
end;

Hoffe das hilft dir

Mari
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: So 12.01.03 19:35 
Hallo,

ausblenden 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:
procedure Splitte(const aDatei:String; Menge:Integer);
var l1, l2:TStringList;
    i:Integer; 
begin
  if FileExists(aDatei) then
  begin
    l1:=TStringList.Create;
    l2:=TStringList.Create;
    try
      l1.LoadFromFile(aDatei);
      for i:=0 to l1.Count-1 do
      begin
        l2.Add(l1.Strings[i]);
        if ((l2.Count=Menge) or (i=l1.Count-1)) then 
        begin
          l2.SaveToFile(Format('%sSplittdatei%0.3d.txt', [IncludeTrailingBackslash(ExtractFilePath(aDatei)), i Div Menge]));
          l2.Clear;
        end; // if
      end; // for i
    finally
      l2.Free;
      l1.Free;
    end; // try
  end; // if
end; // Splitte


Aufgerufen wird das ganze dann:
ausblenden Quelltext
1:
  Splitte('C:\Eigene Dateien\MeineDatei.txt', 300);					


Hoffe es hilft und ist so ohne größere Fehler, da ich den Code nicht getestet habe.

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: So 12.01.03 20:35 
Für Mari und der Vollständigkeit halber nochmal eine Version mit AssignFile usw.
@Mari: Du solltest Dinge wie ReWrite immer in einen Try-Block einbauen. Da kann sonst recht viel daneben gehen, und am Ende stehst mit offenen Dateien und abgestürztem Programm da.

Hier mein Code:
ausblenden volle Höhe 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:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
procedure TForm1.TxtSplit(Datei: String; Zeilen: LongWord);
var
  inDatei,
  outDatei : TextFile;
  outDateiName : String;
  i, j : LongWord;
  Zeile : String;
begin
  AssignFile(inDatei, Datei);
  try
    ReSet(inDatei);
  except
    ShowMessage('Fehler beim öffnen der Source-Datei!');
    CloseFile(inDatei);
    Exit;
  end;
  i := 0;
  repeat
    Inc(i);
    j := 0;
    outDateiName := Copy(Datei,0,Length(Datei)-Length(ExtractFileExt(Datei)))
                    +'['+IntToStr(i)+']'+ExtractFileExt(Datei);
    AssignFile(outDatei, outDateiName);
    try
      ReWrite(outDatei);
    except
      ShowMessage('Fehler beim erzeugen der Output-Datei!');
      CloseFile(inDatei);
      CloseFile(outDatei);
      Exit;
    end;
    repeat
      Inc(j);
      try
        ReadLn(inDatei, Zeile);
        WriteLn(outDatei, Zeile);
      except
        ShowMessage('Read/Write-Fehler in Datei);
        CloseFile(inDatei);
        CloseFile(outDatei);
        Exit;
      end;
    until (j > Zeilen-1) or eof(inDatei);
    CloseFile(outDatei);
  until eof(inDatei);
  CloseFile(inDatei);
end;

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."