Нужно преобразовать файл, удалив последнее слово в каждой строке. (для строк можно использовать только
length, ord,char; для работы с файлом - assign,reset,rewrite, close, eof, rename, erase,seek)
у меня получилась какая-то ерунда( когда даю команду на запуск - runtime error 002 at 0000:004)
uses crt;
const k=ord(' ');
var f:file of string; n:integer;
s:string;
i:byte;
begin
assign(f,'d:\stroku.txt');
reset(f);
while not eof(f) do
begin
for i:=k to length(s)-1 do
s[i]:=s[i+1];
end;
seek(f,n+1);
while not eof(f) do
begin
read(f,s);
writeln(s);
end;
writeln;
close(f);
end.
assign(f,'d:\999');
извините, забыла внести изменения в код!
assign(f,'d:\stroku.txt');
помогите, пожалуйста ,разобраться!
очент нужно!!!
что мне ещё нужно учитывать в моей программе?
Объясните!!!!!
PLEAZZZZZZZZZZZZZZZZZZZZZZ!!!!!!
uses crt;
var
f, temp: Text;
s: String;
i, j: Integer;
begin
assign(f, 'C:\f.txt'); reset(f);
assign(temp, 'C:\temp.txt'); rewrite(temp);
while not(eof(f)) do begin
readln(f, s);
i := Length(s);
while (i > 0) and (s[i] <> ' ') do dec(i);
for j := 1 to i - 1 do write(temp, s[j]);
writeln(temp);
end;
close(f);
erase(f);
close(temp);
rename(temp, 'C:\f.txt');
end.
Спасибо за помощь! у меня вопрос: под i подразумевается очерёдная строка? и ещё - файл temp мы должны создать заранее?
Заранее должен быть создан файл f, содержащий строки, в которых слова разделены _одним_ пробелом.
Читая каждую строку из файла, мы переменной i присваеваем длину этой строки, далее идем по этой строке с конца, пока не наткнемся на пробел (или начало строки), далее записываем во "временный" файл всю строку с начала до того индекса, за которым следуем последний пробел (этот индекс = i) и соответсвенно последнее слово, которое нам не нужно.
program lab_9_1;
uses crt;
type tfile1=text; tfile=text;
procedure fbez_sl(var f:tfile; var f1:tfile1);
var s:string;
i,j:integer;
begin
assign(f,'c:\fil.txt'); reset(f);
assign(f1,'c:\temp.txt'); rewrite(f1);
while not(eof(f)) do begin
readln(f,s);
i:=length(s);
while (i>0) and (s[i]<>' ') do dec(i);
for j:=1 to i-1 do write(f1,s[j]);
writeln (f1);
end;
end;
VAR fil:tfile; temp:tfile1;
begin
fbez_sl(fil,temp);
close(fil);
erase(fil);
close(temp);
rename(temp,'c:\fil.txt');
end.
Читаешь из файла строки и выводишь на экран ... чем проблема - то ?!
program lab_9_1;
uses crt;
type tfile1=text; tfile=text;
procedure fbez_sl(var f:tfile; var f1:tfile1; s:string;);
var
i,j:integer;
begin
assign(f,'c:\fil.txt'); reset(f);
assign(f1,'c:\temp.txt'); rewrite(f1);
while not(eof(f)) do begin
readln(f,s);
i:=length(s);
while (i>0) and (s[i]<>' ') do dec(i);
for j:=1 to i-1 do write(f1,s[j]);
writeln (f1);
end;
end;
VAR fil:tfile; temp:tfile1;
begin
fbez_sl(fil,temp); while not eof(temp) do begin read(temp,s); writeln(s); end;close(fil);
erase(fil);
close(temp);
rename(temp,'c:\fil.txt');
end.
у тебя s - локальная переменная, действует только в procedure fbez_sl.
основная программа не знает, что это такое.
ты бы показала, КАК исправила....
ты можешь привести компилирующийся код?
program lab_9_1;
uses crt;
type tfile1=text; tfile=text;
procedure fbez_sl(var f:tfile; var f1:tfile1; s:string);
var
i,j:integer;
begin
assign(f,'fil.txt'); reset(f);
assign(f1,'temp.txt'); rewrite(f1);
while not(eof(f)) do begin
readln(f,s);
i:=length(s);
while (i>0) and (s[i]<>' ') do dec(i);
for j:=1 to i-1 do write(f1,s[j]);
writeln (f1);
end;
end;
VAR fil:tfile; temp:tfile1; s:string;
begin
fbez_sl(fil,temp,s); reset(temp);
while not eof(temp) do begin read(temp); writeln(s); end;
close(fil);
erase(fil);
close(temp);
rename(temp,'fil.txt');
end.
while not eof(temp) do begin
readLN(temp, S); { <--- У тебя S не было ... }
writeln(s);
end;