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

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

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

Автор: 18192123 17.12.2006 22:39

дан файл со строками (их кол-во не известно). Если в 3 или 5 строке 4-й элемент пробел, то скопировать этот файл в другойб заменив при этом эти символы нулём. Если это условие не выполняется , то удалить эти строки, создав новый файл (имеется в виду переписать в новый файл исходный файл без 3-й и 5-й строк)

использовать только write, read, assign, rewrite, reset, eof, erase, rename, seek

прежде всего не знаю ,как ввести в файл текст по строкам, с вводом в моем варианте решения полная ерунда, получается что-то бесконечно..

ещё не пойму, как переписать в новый файл исходный файл без 3-й и 5-й строк



uses crt;
procedure save_file ( filename : string );
var
f : file of string;
s : string;
c : char;
begin
assign ( f, filename);
rewrite (f);
writeln ('vvedite dannye v file');
repeat
readln ( c );
s := s+c;
until c='.';
readkey;
write (f, s);
close (f);
end;

procedure print_file ( filename : string );
var
f : file of string;
s: string;
i : byte;
begin
assign ( f, filename );
reset (f);
while not eof (f) do
begin
for i := 1 to length (s) do
begin
read (f, s);
writeln (s[i]);
end;
end;
close (f);
end;

procedure file_preobrazovanie ( f_in,f_out : string );
var
f, f1 : file of string;
s : string;
i : byte;
begin
assign (f, f_in );
reset (f);
seek (f, 2 );
if (s[4] = ' ') then
begin
s[4] := '0';
assign (f1, f_out );
rewrite (f1);
while not eof (f) do
write ( f1, s );
close ( f1 );
end;
seek (f, 4);
if (s[4] = ' ') then
begin
s[4] := '0';
assign (f1, f_out );
rewrite (f1);
while not eof (f) do
write ( f1, s );
close ( f1 );
end;
close (f);
end;
vAR
fil : file of string;
begin
clrscr;
save_file ('x-files.bin');
writeln ('============================');
print_file ('x-files.bin');
file_preobrazovanie ('x-files.bin','x-files1.bin');
writeln ('========================');
print_file ('x-files1.bin');
readkey;
end.


Автор: Bokul 18.12.2006 0:32

Конец ввода строки - "." (точка)
Конец ввода (вообще) - Enter


uses crt;
procedure save_file ( filename : string );
var
f : file of string;
s : string;
c : char;
begin
assign(f,filename);
rewrite(f);
writeln('vvedite dannye v file');
repeat
s:='';
repeat
c:=readkey;
write©;
s:=s+c;
until (c='.') or (c=#13);
write(f,s);
writeln;
until c=#13;
close(f);
end;

procedure print_file(filename:string);
var
f:file of string;
s:string;
i:byte;
begin
assign(f,filename);
reset(f);
while not eof(f) do
begin
read(f,s);
writeln(s);
end;
close (f);
end;

procedure file_preobrazovanie ( f_in,f_out : string );
var
f,f1:file of string;
s:string;
i:byte;
b:boolean;
begin
assign(f,f_in);
reset(f);
seek(f,2);
read(f,s);
b:=false;
if (s[4]=' ') then
b:=true
else
begin
seek(f,4);
read(f,s);
if s[4]=' ' then
b:=true;
end;
assign(f1,f_out);
rewrite(f1);
i:=0;
seek(f,0);
while not eof(f) do
begin
inc(i);
read(f,s);
if (i=3) or (i=5) then
if b then
s[4]:='0'
else
continue;
write(f1,s);
end;
close(f);
close(f1);
end;
vAR
fil : file of string;
begin
clrscr;
save_file('x-files.bin');
writeln ('============================');
print_file('x-files.bin');
file_preobrazovanie('x-files.bin','x-files1.bin');
writeln ('========================');
print_file('x-files1.bin');
readkey;
end.



Автор: 18192123 18.12.2006 0:52

Цитата(Bokul @ 17.12.2006 20:32) *


continue;




никогда с таким не сталкивалась? что это обозначает?

Автор: Bokul 18.12.2006 0:57

Справка Паскаля:

Цитата

Continues a for, while, or repeat statement.

Declaration:
procedure Continue

Target:
Windows, Real, Protected

Remarks:
Causes the innermost enclosing for, while, or
repeat statement to
immediately proceed with the next iteration.

The compiler will report an error if a call to
Continue is not enclosed by a
for, while, or repeat statement.



while not eof(f) do
begin
inc(i);<---------------<-------------|
read(f,s); |
if (i=3) or (i=5) then |
if b then |
s[4]:='0' |
else |
continue;---------->------->---|
write(f1,s);
end;


Автор: 18192123 18.12.2006 1:05

я пытаюсь что-то ввести в файл, но нажимая буквы получаю только изменение положения курсора

но чаще всего - ошибка 100


????????????

ой, ой! все получилось! спасибо большое!!!!!

Автор: Bokul 18.12.2006 1:08

Цитата
я пытаюсь что-то ввести в файл, но нажимая буквы получаю только изменение положения курсора

Глюк форума:

procedure save_file ( filename : string );
var
f : file of string;
s : string;
c : char;
begin
assign(f,filename);
rewrite(f);
writeln('vvedite dannye v file');
repeat
s:='';
repeat
c:=readkey;
write©; {поставь после write "с" в дужках}
s:=s+c;
until (c='.') or (c=#13);
write(f,s);
writeln;
until c=#13;
close(f);
end;


Автор: 18192123 18.12.2006 1:16

Цитата(Bokul @ 17.12.2006 21:08)
Глюк форума:


Да, я уже поняла! сегодня когда выкладывала этот код, было тот самое!
Еще раз спасибо!!!!!!

Автор: Bokul 18.12.2006 1:18

Цитата
а как сделать, чтоб в результирующий файл записывались строки кроме 3-й и 5-й??

Для этого у меня continue и стоит. Посмотри внимательно на тот кусок кода, должна понять, как все работает...

Автор: 18192123 18.12.2006 1:18

а как сделать, чтоб в новый файл записывались строки кроме 3-й и 5-й??

у меня вообще нет никаких предположений...


теперь разобралась... уфффффффффффффф....

Автор: Bokul 18.12.2006 1:20

Я наверное читаю твои мысли... lol.gif Посмотри на на мой пост выше...

Автор: 18192123 18.12.2006 1:47

а можно как-нибудь без continue, а то наш препад, как всегда скажет: ".... я вам этого не объяснял"....

Автор: Bokul 18.12.2006 2:00

Цитата
а можно как-нибудь без continue,

Можно и goto использовать... smile.gif

А если только проверками, то так:

while not eof(f) do
begin
inc(i);
read(f,s);
if (i=3) or (i=5) then
begin
if b then
begin
s[4]:='0';
write(f1,s);
end;
end
else
write(f1,s);
end;

Автор: 18192123 5.01.2007 16:08

Цитата(Bokul @ 17.12.2006 22:00) *

А если только проверками, то так:

while not eof(f) do
begin
inc(i);
read(f,s);
if (i=3) or (i=5) then
begin
if b then
begin
s[4]:='0';
write(f1,s); end;
end
else
write(f1,s); end;




Почему так, где я выделила красным цветом мы пишем одно и то же?

Автор: Bokul 5.01.2007 22:38

Почему же одно и то же? Ты не заметила вот эту строчку:

s[4]:='0';

перед первым write(f1,s);

Автор: ordering cheap prednisone withou 2.10.2021 8:04

Viagra Zurich