Помощь - Поиск - Пользователи - Календарь
Полная версия: обработать длинный текст
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Pukelis
всем привет! smile.gif
Есть программка. Она убирает лишние энтеры, заменяя их на пробелы. (оставляет их тока если есть 3 пробела подряд в начале следующей строки)

program Noname0;
var t1,t2:text;
c:char;
pr:packed array [1..3] of char;
k:integer;
begin
assign(t1,'1.txt');
assign(t2,'2.txt');
reset(t1); rewrite(t2);
while not eof(t1) do begin

while not eoln(t1) do begin

for k:=1 to 3 do begin
read(t1,c);
pr[k]:=c;
end;

if (pr[1]= ' ') and (pr[2]= ' ') and (pr[3]=' ')
then writeln(t2);

for k:=1 to 3 do
write(t2,pr[k]);

while not eoln(t1) do begin
read(t1,c);
write(t2,c);
end;

readln(t1);write(t2,' ');

end;
end;

close(t2);
close(t1);
end.


как ее заставить обрабатывать большие тексты? Скажем, на 490000 символов.. Там надо как-то на куски строку резать, да? :P
заранее пасиб smile.gif
klem4
что-то не очень я понял вопрос... зачем что-то резать ? ведь когда у тебя есть

var
f:text;
s:string;

ты ведь пишешь readln(f,s) и считываешь одну строку из 255 символов, потом если надо следующую и так далее.
Altair
тем более, что ты назвал цифру в ~478 КБ - даже МБ нет smile.gif
Malice
Чтобы программа обрабытывала строки <3 символов надо заменить строки:
                          for k:=1 to 3 do  begin
read(t1,c); pr[k]:=c;
end;
................
for k:=1 to 3 do
на
i:=0;
while not(eof(t1)) and (i<3) do
begin
read(t1,c); inc (i);
pr[i]:=c;
end;
........
for k:=1 to i do
Вот эта строка мне тоже не нравится:
                      readln(t1);write(t2,' '); 
Если в тексте будет пустая строка, то программа похоже повиснет в цикле
while not eoln(t1) do 

Ее тоже заменить на что-то вроде:
 while eoln(t1) and not (eof(t1)) do   readln(t1); 


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