Помощь - Поиск - Пользователи - Календарь
Полная версия: работа с файлом
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
18192123
Нужно преобразовать файл, удалив последнее слово в каждой строке. (для строк можно использовать только
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.


IchLiebeDich
Цитата(18192123 @ 3.12.2006 16:23) *

Нужно преобразовать файл, удалив последнее слово в каждой строке.

у меня получилась какая-то ерунда( когда даю команду на запуск - runtime error 002 at 0000:004)


assign(f,'d:\999');



а файл открывает вообще? не указываешь расширение...
volvo
Цитата
а файл открывает вообще?
no1.gif Мало того, что не открывает, так программа его вообще не находит, и сообщает об этом...

Error 2: File not found.
18192123
извините, забыла внести изменения в код!
assign(f,'d:\stroku.txt');

но ошибки остались, у меня больше никаких мыслей! wacko.gif
18192123
помогите, пожалуйста ,разобраться!
очент нужно!!!
что мне ещё нужно учитывать в моей программе?

Объясните!!!!!
PLEAZZZZZZZZZZZZZZZZZZZZZZ!!!!!!
klem4
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.


18192123
Спасибо за помощь! у меня вопрос: под i подразумевается очерёдная строка? и ещё - файл temp мы должны создать заранее?
klem4
Заранее должен быть создан файл f, содержащий строки, в которых слова разделены _одним_ пробелом.

Читая каждую строку из файла, мы переменной i присваеваем длину этой строки, далее идем по этой строке с конца, пока не наткнемся на пробел (или начало строки), далее записываем во "временный" файл всю строку с начала до того индекса, за которым следуем последний пробел (этот индекс = i) и соответсвенно последнее слово, которое нам не нужно.
18192123
Цитата(klem4 @ 4.12.2006 22:12) *

Заранее должен быть создан файл f, содержащий строки, в которых слова разделены _одним_ пробелом.

Читая каждую строку из файла, мы переменной i присваеваем длину этой строки, далее идем по этой строке с конца, пока не наткнемся на пробел (или начало строки), далее записываем во "временный" файл всю строку с начала до того индекса, за которым следуем последний пробел (этот индекс = i) и соответсвенно последнее слово, которое нам не нужно.

теперь вроде всё понятно! ещё раз большое спасибо!
18192123

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.



А КАК МН ВЫВЕСТИ РЕЗУЛЬТАТЫ РАБОТЫ НА ЭКРАН?
klem4
Читаешь из файла строки и выводишь на экран ... чем проблема - то ?!
18192123
Цитата(klem4 @ 7.12.2006 20:15) *

Читаешь из файла строки и выводишь на экран ... чем проблема - то ?!

проблема втом, что не получается... вот что делаю

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.
основная программа не знает, что это такое.
18192123
Цитата(мисс_граффити @ 7.12.2006 22:52) *

у тебя s - локальная переменная, действует только в procedure fbez_sl.
основная программа не знает, что это такое.

исправила, выдает пустой экран
мисс_граффити
ты бы показала, КАК исправила....
18192123
Цитата(мисс_граффити @ 7.12.2006 23:08) *

ты бы показала, КАК исправила....

смотри в коде
мисс_граффити
ты можешь привести компилирующийся код?
18192123
Цитата(мисс_граффити @ 7.12.2006 23:23) *

ты можешь привести компилирующийся код?


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.

volvo
while not eof(temp) do begin
readLN(temp, S); { <--- У тебя S не было ... }
writeln(s);
end;


И не имей никогда такой привычки - читать что-то из файла (в особенности строку) через Read... ТОЛЬКО ReadLN
18192123
Цитата(volvo @ 7.12.2006 23:37) *

while not eof(temp) do begin
readLN(temp, S); { <--- У тебя S не было ... }
writeln(s);
end;


И не имей никогда такой привычки - читать что-то из файла (в особенности строку) через Read... ТОЛЬКО ReadLN

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