Помощь - Поиск - Пользователи - Календарь
Полная версия: работа с файлом
Форум «Всё о Паскале» > 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
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.