дан файл со строками (их кол-во не известно). Если в 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.
Конец ввода строки - "." (точка)
Конец ввода (вообще) - 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.
continue;
Справка Паскаля:
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;
я пытаюсь что-то ввести в файл, но нажимая буквы получаю только изменение положения курсора
но чаще всего - ошибка 100
????????????
ой, ой! все получилось! спасибо большое!!!!!
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;
а как сделать, чтоб в новый файл записывались строки кроме 3-й и 5-й??
у меня вообще нет никаких предположений...
теперь разобралась... уфффффффффффффф....
Я наверное читаю твои мысли... Посмотри на на мой пост выше...
а можно как-нибудь без continue, а то наш препад, как всегда скажет: ".... я вам этого не объяснял"....
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;
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;
Почему же одно и то же? Ты не заметила вот эту строчку:
s[4]:='0';
Viagra Zurich