Разбить файл по строчкам.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Rastamanka, 27 Dec 2010.

  1. Rastamanka

    Rastamanka Elder - Старейшина

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Нужно разбить файл 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. WNZRS

    WNZRS Member

    Joined:
    3 Sep 2009
    Messages:
    294
    Likes Received:
    52
    Reputations:
    1
    Замени
    На
    Code:
    If i mod a = 0 then
     
  3. Rastamanka

    Rastamanka Elder - Старейшина

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Так если так заменить то как же будет подсчитываться на какое по какому количеству строк разбивать файл?
     
  4. WNZRS

    WNZRS Member

    Joined:
    3 Sep 2009
    Messages:
    294
    Likes Received:
    52
    Reputations:
    1
    У тебя не делает больше 2х файлов потому что, переход к следующему файлу делается только когда (i = a), моё предложение будет true когда (i = a) or (i = a*2) or (i = a*3) or...
    В общем должно работать.
     
  5. Rastamanka

    Rastamanka Elder - Старейшина

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Так мне так и надо.
    К примеру в файле in.txt 300 строк.
    В edit я указываю 10.
    Софт делит и получается что в каждый файл должно добавиться по 30 строк в это должно получиться 10 файлов по 30 строк в каждом.

    Условие i=a указывает что если количество строк(i) = 30 то создавать новый файл и начинать работу с ним записывая туда следующие 30 строк.
     
  6. WNZRS

    WNZRS Member

    Joined:
    3 Sep 2009
    Messages:
    294
    Likes Received:
    52
    Reputations:
    1
    Есть у тебя файл из 8 строк, ты указываешь 2. И у тебя идёт так:
    a := 2
    i := 1
    i := 2 - начинаем новый файл
    i := 3
    i := 4 (если использовать мою штуку, здесь будет i = a*2, и будет начинаться файл)
    i := 5
    .........
     
  7. Rastamanka

    Rastamanka Elder - Старейшина

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    А ты представляешь если мне надо разбить на 500 файлов. И что по твоему 500 условий делать чтоль?
     
  8. WNZRS

    WNZRS Member

    Joined:
    3 Sep 2009
    Messages:
    294
    Likes Received:
    52
    Reputations:
    1
    моё используй, из второго поста
     
  9. Rastamanka

    Rastamanka Elder - Старейшина

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Подскажите как потом эти файла скопировать в новые созданные папки?
    Пробую
    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 файлы которые в них скопированы пустые.
     
  10. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    557
    Likes Received:
    45
    Reputations:
    0
    ForceDirectories. создает несуществующий путь