Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 416

/ вопрос решён /

Здравствуйте, эксперты!
Мне понадобилось для работы разбить большой текстовый файл на мелкие файлики по 50 строк. если можно напишите пожалуйста пример подобной программы, к сожалению я не смог ничего написать. разделителем должен быть конец строки. то есть программка должна из большого файла считывать по 50 строк и записывать их в файлы у которых естественно должно меняться имя.
то есть структура наверное такова:
1) открыть большой файл
2)считать 50 строк
3)создать файл 1.txt
4)записать 50 строк в файл 1.txt
5)считать следующие 50 строк из большого файла
6)создать файл 2.txt
7)записать 50 строк в файл 2.txt

Спасибо!

Novice Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Novice (статус: Посетитель)
Вопрос отправлен: 15 марта 2008, 16:20
Состояние вопроса: решён, ответов: 4.

Ответ #1. Отвечает эксперт: Dron

Здравствуйте, Validator!
Ну это простенькая задачка. Алгоритм довольно прост: считываем из исходного файла строки по одной и тут же записываем в другой файл. Параллельно считаем количество строк. Как только нужное число строк достигнуто, закрываем текущий файл и открываем следующий. В приложении код. Исходный файл - data.txt. Желаю удачи!

Приложение:
  1. const
  2. Count = 50;
  3. var
  4. F0,F1: TextFile;
  5. N: Integer;
  6. S: String;
  7.  
  8. ...
  9.  
  10. AssignFile(F0,'data.txt');
  11. Reset(F0);
  12. N:=0;
  13. while not(Eof(F0)) do
  14. begin
  15. if N mod Count = 0 then
  16. begin
  17. AssignFile(F1,IntToStr(N div Count)+'.txt');
  18. Rewrite(F1);
  19. end;
  20. ReadLn(F0,S);
  21. WriteLn(F1,S);
  22. if N mod Count = Count-1 then
  23. CloseFile(F1);
  24. Inc(N);
  25. end;
  26. CloseFile(F0);


Ответ отправил: Dron (статус: Студент)
Время отправки: 15 марта 2008, 16:59
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Drozdov D.V.

Здравствуйте, Novice!
Примеры посмотрите где расказывается о сортировке или работы свайлом по его усечению или резки
если необходимо орентироватся по определёному элементу.
До меня вам полностью уже ответил Dron.
Удачи!
P.S.

Задача решается следующим способом:

Приложение:
  1. 1
  2.  
  3. F,F1,F2,F3,F4,F5 : file;
  4.  
  5. S : string;
  6.  
  7. A:integer;
  8. 2
  9.  
  10.  
  11. assign(F1,'file1');
  12. for a:=0 to 50 do
  13. begin
  14. read(f,s);
  15. write(f1,s);
  16. end;
  17. assign(F2,'file2');
  18. for a:=0 to 50 do
  19. begin
  20. read(f,s);
  21. write(f2,s);
  22. end;
  23.  


Ответ отправил: Drozdov D.V. (статус: 4-ый класс)
Время отправки: 15 марта 2008, 18:42
Оценка за ответ: 5

Ответ #3. Отвечает эксперт: Деревяно Евгений

Здравствуйте, Validator!

Вот фрагмент кода, который решает задачу.

Приложение:
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. const
  3. SrcFileName = 'E:\Temp\SRC.TXT';
  4. DstFileTemplate = 'E:\Temp\Rez\DstFile%5d.txt';
  5. var
  6. src, dst: TextFile;
  7.  
  8.  
  9.  
  10. DstFileName: string;
  11. begin
  12. AssignFile(src, SrcFileName);
  13. Reset(src);
  14. try
  15. i := 0;
  16. while not Eof(src) do begin
  17. Inc(i);
  18. DstFileName := Format(DstFileTemplate, [i]);
  19. AssignFile(dst, DstFileName);
  20. Rewrite(dst);
  21. try
  22. j := 0;
  23. while (not Eof(src)) and (j < 50) do begin
  24. Readln(src, s);
  25. Writeln(dst, s);
  26. inc(j);
  27. end;
  28. finally
  29. CloseFile(dst);
  30. end;
  31. end;
  32. finally
  33. CloseFile(src);
  34. end;
  35. ShowMessage('Done');
  36. end;


Ответ отправил: Деревяно Евгений (статус: 1-ый класс)
Время отправки: 16 марта 2008, 04:28

Ответ #4. Отвечает эксперт: min@y™

Странно, что никто не предложил вериант с TStringList. Пришлось мне...

Приложение:
  1. var
  2. Source, Dest: TStringList;
  3. Index, Count, FileIndex: Integer;
  4. begin
  5. Source:= TStringList.Create();
  6. Dest:= TStringList.Create();
  7.  
  8. try
  9. Source.LoadFromFile();
  10. Index:= 0;
  11. Count:= 0;
  12. FileIndex:= 0;
  13.  
  14. while (Index < Source.Count) do
  15. begin
  16. if (Count < 50)
  17. then begin
  18. Dest.Add(Source[Index]);
  19. Inc(Count);
  20. end
  21. else begin
  22. Inc(FileIndex);
  23. Dest.SaveToFile(IntToStr(FileIndex) + '.txt');
  24. Dest.Clear();
  25. Count:= 0;
  26. end;
  27.  
  28. Inc(Index);
  29. end;
  30.  
  31. if (Dest.Count <> 0)
  32. then begin
  33. Inc(FileIndex);
  34. Dest.SaveToFile(IntToStr(FileIndex) + '.txt');
  35. end;
  36. finally
  37. Source.Free();
  38. Dest.Free();
  39. end;
  40. end;


Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 17 марта 2008, 08:43


Мини-форум вопроса

Всего сообщений: 0.

31 января 2011, 20:02: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:40
Выполнено за 0.03 сек.