Помощь - Поиск - Пользователи - Календарь
Полная версия: Строки...
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
sandman
Вроде несложная задачка..
"В текстовом файле (размер до 600kb) удалить все символы перевода строки."
А как подступиться не знаю.. Мозга не варит sad.gif Советом, хоть помогите...
trminator
Первое, что пришло в голову - читать из файла ReadLn'ом, а писАть Write'ом (правда, придется заводить для этого разные файлы, но я все равно не знаю способа именно изменять файл - умею или только писАть, или только читать sad.gif)
Ivs
Перевод строки это если я не ошибаюсь символ #10. Так что мешает. Читай Read'ом символ, и если он не "символ перевода строки", то пиши в новый файл Writ'ом.
Ну а дальше удаляй старый и переименовывай новый.
sandman
Цитата
Перевод строки это если я не ошибаюсь символ #10. Так что мешает. Читай Read'ом символ, и если он не "символ перевода строки", то пиши в новый файл Writ'ом.
Ну а дальше удаляй старый и переименовывай новый.


тогда имхо быстрее будет так, как написал trminator...
Ivs
Цитата

тогда имхо быстрее будет так, как написал trminator...

Нет, так будет неправильно.
zx1024
>sandman
Pascal делает то же самое (читает перевод строки), поэтому скорость зависит от реализации.
>Ivs
#10 #13
>Ну а дальше удаляй старый и переименовывай новый.
Слишком долго, т.к. идёт обращение к винту.
Ivs
Цитата
>Ivs
#10 #13
.

А я думал что это символы перевода строки и возврата корретки.
Ivs
Цитата
>Ну а дальше удаляй старый и переименовывай новый.
Слишком долго, т.к. идёт обращение к винту.

Ваш вариант.
zx1024
Ivs
Так они по одному редко используются. Тем более в этой задаче. Тем более после ответа про ReadLn.
zx1024
Ivs.
Я имел ввиду то, что не стоит после каждого нахождения #10 работать с файлами (физически).
zx1024
Ivs.
P.S. Просьба: не надо меня на Вы. Пожалуйста.
Ivs
Хорошо тогда так: Читай Read'ом символ, и если он не "символ перевода строки" и "возврата корретки", то пиши в новый файл Writ'ом. Проверил работает.
Вариант с readln'ом не работает.
Ivs
Цитата
Ivs.
P.S. Просьба: не надо меня на Вы. Пожалуйста.

Как хочешь.
zx1024
Ivs.
Наверное, мне придётся извиниться за  <06.09.2003 00:40:07>.
Ведь в условии ничего не было про возврат корретки.
sandman
Всем спасибо. Все понял. Во всем разобрался smile.gif
trminator
Цитата
Вариант с 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
GLuk
А як же BlockRead/Write??!!
trminator
ммм... при чем тут BlockRead? Это же текстовый файл, зачем BlockRead?
sandman
Всем спасибо за ответы и предложения, но задача усложняется... smile.gif Возможно, что файл в koi8-r smile.gif
Тогда что? smile.gif
trminator
так... По идее, нам все равно, в каком там порядке идут русские буковки (да хоть маковская кодировка, #10#13 они такими и будут). Но. Возможно, мы имеем тогда дело с файлом в стиле Unix, а там принято строку заканчивать не #10#13 а просто #10. Тогда читаем по байту, если это не #10, то записываем.

В общем, все то же самое
GLuk
Цитата
ммм... при чем тут BlockRead? Это же текстовый файл, зачем BlockRead?


Какая разница, всяко лучше читать по блокам, чем по строкам. И выдает он тебе те ж самые данные, что и ReadLn только побыстрее.
Читаем данные в первый сегмент, затем чекаем на предмет 13,10, одновременно посылая отчеканенные данные в другой сегмент, потом пишем его на ЖД и так пока не кончатся данные...

И, к слову, понятия текстового файла на бинарном уровне принципиально не может быть.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.