Цитата:
Сообщение от Tanusha
Здравствуйте уважаемые обитатели форума!
нужно вставить #10 (конец строки) через каждые 150 символов в нетипизированный файл.
если встречается #13 (enter), то далее отсчет символов начинать заново.
причем слова в тексте не должны разрываться, т.е. вставку делать перед следующим пробелом
кое-что нашла
|
Уважаемая Танюша, прежде всего позволю себе дать Вам один совет. Осваивая программирование, старайтесь решать задачи самостоятельно, а не шарить по всяким помойкам в поисках "кое-чего". Взять хотя бы приведенный Вами листинг. Да он просто изобилует ошибками и неряшливостями! Начнем с начала:
Код:
f: file;
f2:file;
j,n:integer;
s:string
Для данной задачи следует использовать тип файла TEXT.
Идем дальше:
Код:
assign(f, text.txt);
reset(f);
assign(f2, file1.txt);
rewrite(f2);
Не пойдет! Параметром функции Assign является СТРОКОВАЯ переменная (полное, включая путь, имя файла), поэтому надо либо ввести такие переменные и присвоить им значения путей, например
Код:
var
st:String;
begin
st:='D:\text.txt';
Assign(f, st);
end;
либо, если имя файла указывается явно, по крайней мере взять его в кавычки:
Код:
assign(f, 'text.txt');
Далее:
Код:
for j:=n+150 to n+1 do
Абсолютно бессмысленная запись, потому что при любом n справедливо условие n+150>n+1, следовательно цикл выполняться не будет (для нисходящих значений переменной цикла используется downto, но здесь это ни к селу, ни к городу).
Можно и дальше продолжать, но, я полагаю, достаточно.
Мне кажется, что программа должна выглядеть как-то так:
Код:
var
f,f2: TEXT;
n:Byte;
s:string;
begin
assign(f, 'D:\text.txt');
reset(f);
assign(f2, 'D:\file1.txt');
rewrite(f2);
Repeat
ReadLn(f,s);
If Length(s)>150 then
begin
n:=150;
Repeat
Inc(n);
Until (s[n]=' ') or (s[n]=#13);
If s[n]=' ' then insert(#10,s,n);
end;
WriteLn(f2,s);
Until EoF(f);
close(f);
close(f2);
end.
Попробуйте - если что-то не так, поправьте сами или напишите сюда.
Да, естественно, пути к файлам поставьте свои.