|
Вопрос # 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 do
- begin
- read(f,s);
- write(f1,s);
- end;
- assign(F2,'file2');
- for a:=0 to 50 do
- begin
- read(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)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|