Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ работа с файлом

Автор: 18192123 3.12.2006 21:23

Нужно преобразовать файл, удалив последнее слово в каждой строке. (для строк можно использовать только
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 3.12.2006 21:46

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

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

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


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



а файл открывает вообще? не указываешь расширение...

Автор: volvo 3.12.2006 21:54

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

Error 2: File not found.

Автор: 18192123 3.12.2006 22:28

извините, забыла внести изменения в код!

assign(f,'d:\stroku.txt');

но ошибки остались, у меня больше никаких мыслей! wacko.gif

Автор: 18192123 4.12.2006 20:05

помогите, пожалуйста ,разобраться!
очент нужно!!!
что мне ещё нужно учитывать в моей программе?

Объясните!!!!!
PLEAZZZZZZZZZZZZZZZZZZZZZZ!!!!!!

Автор: klem4 4.12.2006 20:54

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 5.12.2006 1:22

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

Автор: klem4 5.12.2006 2:12

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

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

Автор: 18192123 5.12.2006 2:54

Цитата(klem4 @ 4.12.2006 22:12) *

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

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

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

Автор: 18192123 6.12.2006 21:57


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 8.12.2006 0:15

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

Автор: 18192123 8.12.2006 2:46

Цитата(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.

Автор: мисс_граффити 8.12.2006 2:52

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

Автор: 18192123 8.12.2006 2:55

Цитата(мисс_граффити @ 7.12.2006 22:52) *

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

исправила, выдает пустой экран

Автор: мисс_граффити 8.12.2006 3:08

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

Автор: 18192123 8.12.2006 3:13

Цитата(мисс_граффити @ 7.12.2006 23:08) *

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

смотри в коде

Автор: мисс_граффити 8.12.2006 3:23

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

Автор: 18192123 8.12.2006 3:30

Цитата(мисс_граффити @ 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 8.12.2006 3:37

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


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

Автор: 18192123 8.12.2006 3:40

Цитата(volvo @ 7.12.2006 23:37) *

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


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

Спасибо! поняла! smile.gif