| 
| 
 | Вопрос # 1 416/ вопрос решён / | 
 |  Здравствуйте, эксперты!Мне понадобилось для работы разбить большой текстовый файл на мелкие файлики по 50 строк. если можно напишите пожалуйста пример подобной программы, к сожалению я не смог ничего написать. разделителем должен быть конец строки. то есть программка должна из большого файла считывать по 50 строк и записывать их в файлы у которых естественно должно меняться имя.
 то есть структура наверное такова:
 1) открыть большой файл
 2)считать 50 строк
 3)создать файл 1.txt
 4)записать 50 строк в файл 1.txt
 5)считать следующие 50 строк из большого файла
 6)создать файл 2.txt
 7)записать 50 строк в файл 2.txt
 
 Спасибо!
 
|  |   Вопрос задал: Novice (статус: Посетитель)Вопрос отправлен: 15 марта 2008, 16:20
 Состояние вопроса: решён, ответов: 4.
 |  Ответ #1. Отвечает эксперт: Dron Здравствуйте, Validator!Ну это простенькая задачка. Алгоритм довольно прост: считываем из исходного файла строки по одной и тут же записываем в другой файл. Параллельно считаем количество строк. Как только нужное число строк достигнуто, закрываем текущий файл и открываем следующий. В приложении код. Исходный файл - data.txt. Желаю удачи!
 Приложение:Переключить в обычный режим const  Count = 50;var  F0,F1: TextFile;  N: Integer;  S: String; ...   AssignFile(F0,'data.txt');  Reset(F0);  N:=0;  while not(Eof(F0)) do  begin    if N mod Count = 0 then    begin      AssignFile(F1,IntToStr(N div Count)+'.txt');      Rewrite(F1);    end;    ReadLn(F0,S);    WriteLn(F1,S);    if N mod Count = Count-1 then      CloseFile(F1);    Inc(N);  end;  CloseFile(F0);
|  | Ответ отправил: Dron (статус: Студент)Время отправки: 15 марта 2008, 16:59
 Оценка за ответ: 5
 |  Ответ #2. Отвечает эксперт: Drozdov D.V. Здравствуйте, Novice!Примеры посмотрите где расказывается о сортировке или работы свайлом по его усечению или резки
 если необходимо орентироватся по определёному элементу.
 До меня вам полностью уже ответил Dron.
 Удачи!
 P.S.
 
 Задача решается следующим способом:
 Приложение:Переключить в обычный режим 1  F,F1,F2,F3,F4,F5 : file; S : string; A:integer;2  assign(F1,'file1');for a:=0 to 50 dobeginread(f,s);write(f1,s);end;assign(F2,'file2');for a:=0 to 50 dobeginread(f,s);write(f2,s);end; 
|  | Ответ отправил: Drozdov D.V. (статус: 4-ый класс)Время отправки: 15 марта 2008, 18:42
 Оценка за ответ: 5
 |  Ответ #3. Отвечает эксперт: Деревяно Евгений Здравствуйте, Validator!
 Вот фрагмент кода, который решает задачу.
 Приложение:Переключить в обычный режим procedure TForm1.Button1Click(Sender: TObject);const  SrcFileName = 'E:\Temp\SRC.TXT';  DstFileTemplate = 'E:\Temp\Rez\DstFile%5d.txt';var  src, dst: TextFile;     DstFileName: string;begin  AssignFile(src, SrcFileName);  Reset(src);  try    i := 0;    while not Eof(src) do begin      Inc(i);      DstFileName := Format(DstFileTemplate, [i]);      AssignFile(dst, DstFileName);      Rewrite(dst);      try        j := 0;        while (not Eof(src)) and (j < 50) do begin          Readln(src, s);          Writeln(dst, s);          inc(j);        end;      finally        CloseFile(dst);      end;    end;  finally    CloseFile(src);  end;  ShowMessage('Done');end;
|  | Ответ отправил: Деревяно Евгений (статус: 1-ый класс)Время отправки: 16 марта 2008, 04:28
 
 |  Ответ #4. Отвечает эксперт: min@y™ Странно, что никто не предложил вериант с TStringList. Пришлось мне... Приложение:Переключить в обычный режим var  Source, Dest: TStringList;  Index, Count, FileIndex: Integer;begin  Source:= TStringList.Create();  Dest:= TStringList.Create();   try    Source.LoadFromFile();    Index:= 0;    Count:= 0;    FileIndex:= 0;     while (Index < Source.Count) do      begin        if (Count < 50)          then begin                 Dest.Add(Source[Index]);                 Inc(Count);               end          else begin                 Inc(FileIndex);                 Dest.SaveToFile(IntToStr(FileIndex) + '.txt');                 Dest.Clear();                 Count:= 0;               end;         Inc(Index);      end;     if (Dest.Count <> 0)      then begin             Inc(FileIndex);             Dest.SaveToFile(IntToStr(FileIndex) + '.txt');           end;  finally    Source.Free();    Dest.Free();  end;end;
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 17 марта 2008, 08:43
 
 |  
 Мини-форум вопросаВсего сообщений: 0. 31 января 2011, 20:02: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |