Нужно разбить файл in.txt на одинаковое количество строк. А в моем коде получается что я разделяю файл на 2 файла несмотря что указано в edit при этом первый файл попадает правильное количество строк а во второй все остальное. Что не так? Code: procedure newfile(filename:string); var f : textfile; begin AssignFile(F,filename); Rewrite(f); CloseFile(F); end; procedure AddLineToFile(filename,data:string); var f : textfile; begin AssignFile(F,filename); Append(f); WriteLn(F,Data); CloseFile(F); end; procedure TForm1.btn1Click(Sender: TObject); var list : TStringList; files: Integer; count_del: Integer; count: Integer; myFile: TextFile; text: string; i,a,b: Integer; filed: string; begin list := TstringList.Create; list.LoadFromFile('in.txt'); count:= list.Count; count_del:= StrToInt(edt1.Text); files:= Round(count / count_del); a:=files; list.Free; AssignFile(myFile, 'in.txt'); Reset(myFile); i:=0; b:=0; filed:=IntToStr(b)+'.txt'; newfile(filed); while not Eof(myFile) do begin i:=i+1; ReadLn(myFile, text); AddLineToFile(filed,text); If i=a then begin b:=b+1; filed:=IntToStr(b)+'.txt'; newfile(filed); end; end; CloseFile(myFile); end;
Так если так заменить то как же будет подсчитываться на какое по какому количеству строк разбивать файл?
У тебя не делает больше 2х файлов потому что, переход к следующему файлу делается только когда (i = a), моё предложение будет true когда (i = a) or (i = a*2) or (i = a*3) or... В общем должно работать.
Так мне так и надо. К примеру в файле in.txt 300 строк. В edit я указываю 10. Софт делит и получается что в каждый файл должно добавиться по 30 строк в это должно получиться 10 файлов по 30 строк в каждом. Условие i=a указывает что если количество строк(i) = 30 то создавать новый файл и начинать работу с ним записывая туда следующие 30 строк.
Есть у тебя файл из 8 строк, ты указываешь 2. И у тебя идёт так: a := 2 i := 1 i := 2 - начинаем новый файл i := 3 i := 4 (если использовать мою штуку, здесь будет i = a*2, и будет начинаться файл) i := 5 .........
Подскажите как потом эти файла скопировать в новые созданные папки? Пробую Code: If i mod a = 0 then begin b:=b+1; filed:=IntToStr(b)+'.txt'; newfile(filed); dir:='C:\run\'+IntToStr(b); createdir(dir) ; copy_dir:=dir+'\' + filed; CopyFile(PAnsiChar(filed), PAnsiChar(copy_dir), true); end; Но у меня txt файлов получается к примеру 6 а папок создается 5 и все txt файлы которые в них скопированы пустые.