Помощь - Поиск - Пользователи - Календарь
Полная версия: нюанс со вставкой строки в текстовый файл
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Мистер Ди
Задание:
ввести с клавиатуры строчку S1 и два числа №1 и №2. В тексте с позиции №1 вставить строку S1, с заменой символов (вместо старых символов), с позиции №2 вставить ту же строчку в обратной последовательности (абв - вба). Вывести измененную строку на экран до и после изменения.

У меня стирается конец строки из самого файла при вставке... Как увеличить строку, В которую вставляем?
ЗЫ вставка выделена...
program laba2;
uses crt;
var
f:text;
a,s:array[1..80] of string;
k,i,dl,e,dl1,i1,dl2,w,t:integer;
name,c,q,buf: string;
n1,n2:integer;
label 1;
function open_f(var f:text;name:string): boolean;
begin
assign(f,name);
{$I-};reset(f);{$I+};
if IOResult=0 then
begin
writeln('Файл открыт успешно');
open_f:=true;
end
else
begin
writeln('Ошибка открытия файла ');
writeln;
open_f:=false;
end;
end;
procedure vyvod(var f:text;name:string);
begin
assign(f,name);
{$I-};reset(f);{$I+};
writeln;
repeat
readln(f,c);
writeln©;
until EOF(f);
close(f);
writeln;
end;
begin
clrscr;
repeat
write('Введите название файла : ');
readln(name);
writeln;
until open_f(f,name) = true;

repeat
readln(f,s[k]);
dl:=dl+length(s[k]);
until EOF(f);
writeln('Введите числа №1 и №2, причём меньше ',dl,'.');
write('№1-');
readln(n1);

write('№2-');
readln(n2);

1: Write('Введите строку не ьольше ',((n2-n1)+1),'-');
Readln(q);
dl2:=length(q);
If dl2>((n2-n1)+1) then begin Writeln('Ошибка ввода '); goto 1 end;
clrscr;

writeln ('Файл');
vyvod (f,name);

reset (f);

Writeln('Ввод строки между позициями №1-',n1,'и №2-',n2,' и вставка перевёрнутой строки после позиции №2-',n2);
k:=1;
i1:=0;
w:=1;
e:=1;

For i:=dl2 downto 1 do
begin
buf[e]:=q[i];
inc(e);
end;
e:=1;

repeat
readln(f,s[k]);
dl1:=length(s[k]);
dl2:=length(q);
For i:=1 to dl1 do
begin
inc(i1);
If (i1>=n1) and (dl2>=w) then
begin
s[k,i]:=q[w];
inc(w);
end;
If (i1>n2) and (dl2>=e) then
Begin
for t:=dl1 downto i do
begin
s[k,t+1]:=s[k,t];
s[k,t]:=buf[e];
dl1:=dl1+1;

end;
inc(e);
end;
end;
Writeln(s[k]);
inc(k);
until EOF(f);
readkey;
close (f);
end.

volvo
Цитата
Как увеличить строку, В которую вставляем?
Пользоваться процедурой Insert, что автоматически изменит длину строки при добавлении... Иначе (при твоем методе вставки) длину строки надо менять вручную...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.