Вроде несложная задачка..
"В текстовом файле (размер до 600kb) удалить все символы перевода строки."
А как подступиться не знаю.. Мозга не варит
Советом, хоть помогите...
trminator
5.09.2003 14:34
Первое, что пришло в голову - читать из файла ReadLn'ом, а писАть Write'ом (правда, придется заводить для этого разные файлы, но я все равно не знаю способа именно изменять файл - умею или только писАть, или только читать
)
Перевод строки это если я не ошибаюсь символ #10. Так что мешает. Читай Read'ом символ, и если он не "символ перевода строки", то пиши в новый файл Writ'ом.
Ну а дальше удаляй старый и переименовывай новый.
Цитата
Перевод строки это если я не ошибаюсь символ #10. Так что мешает. Читай Read'ом символ, и если он не "символ перевода строки", то пиши в новый файл Writ'ом.
Ну а дальше удаляй старый и переименовывай новый.
тогда имхо быстрее будет так, как написал trminator...
Цитата
тогда имхо быстрее будет так, как написал trminator...
Нет, так будет неправильно.
>sandman
Pascal делает то же самое (читает перевод строки), поэтому скорость зависит от реализации.
>Ivs
#10 #13
>Ну а дальше удаляй старый и переименовывай новый.
Слишком долго, т.к. идёт обращение к винту.
Цитата
>Ivs
#10 #13
.
А я думал что это символы перевода строки и возврата корретки.
Цитата
>Ну а дальше удаляй старый и переименовывай новый.
Слишком долго, т.к. идёт обращение к винту.
Ваш вариант.
Ivs
Так они по одному редко используются. Тем более в этой задаче. Тем более после ответа про ReadLn.
Ivs.
Я имел ввиду то, что не стоит после каждого нахождения #10 работать с файлами (физически).
Ivs.
P.S. Просьба: не надо меня на Вы. Пожалуйста.
Хорошо тогда так: Читай Read'ом символ, и если он не "символ перевода строки" и "возврата корретки", то пиши в новый файл Writ'ом. Проверил работает.
Вариант с readln'ом не работает.
Цитата
Ivs.
P.S. Просьба: не надо меня на Вы. Пожалуйста.
Как хочешь.
Ivs.
Наверное, мне придётся извиниться за <06.09.2003 00:40:07>.
Ведь в условии ничего не было про возврат корретки.
Всем спасибо. Все понял. Во всем разобрался
trminator
9.09.2003 22:11
Цитата
Вариант с readln'ом не работает.
Я согласен, правильнее было бы обрабатывать по символам, как ты рекомендовал. Но это грустно и тоскливо (по-моему). Поэтому я предложил такой способ.
Но мне интересно, почему он у тебя не проходит. Я его только что прогнал - он работает (Delphi console application)
Код
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
var input, output : text;
s: string;
begin
assign(input,'input.txt');
assign(output,'output.txt');
reset(input);
rewrite(output);
while not EOF(input) do begin
ReadLn(input,s);
Write(output,s)
end;
close(input);
close(output);
end.
Сейчас проверю в BP7
А як же BlockRead/Write??!!
trminator
16.09.2003 12:37
ммм... при чем тут BlockRead? Это же текстовый файл, зачем BlockRead?
Всем спасибо за ответы и предложения, но задача усложняется...
Возможно, что файл в koi8-r
Тогда что?
trminator
16.09.2003 22:23
так... По идее, нам все равно, в каком там порядке идут русские буковки (да хоть маковская кодировка, #10#13 они такими и будут). Но. Возможно, мы имеем тогда дело с файлом в стиле Unix, а там принято строку заканчивать не #10#13 а просто #10. Тогда читаем по байту, если это не #10, то записываем.
В общем, все то же самое
Цитата
ммм... при чем тут BlockRead? Это же текстовый файл, зачем BlockRead?
Какая разница, всяко лучше читать по блокам, чем по строкам. И выдает он тебе те ж самые данные, что и ReadLn только побыстрее.
Читаем данные в первый сегмент, затем чекаем на предмет 13,10, одновременно посылая отчеканенные данные в другой сегмент, потом пишем его на ЖД и так пока не кончатся данные...
И, к слову, понятия текстового файла на бинарном уровне принципиально не может быть.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.