IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> обнуление и удаление строк в файле
18192123
сообщение 17.12.2006 18:39
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


дан файл со строками (их кол-во не известно). Если в 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.



Сообщение отредактировано: 18192123 - 17.12.2006 18:40
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 17.12.2006 20:32
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Конец ввода строки - "." (точка)
Конец ввода (вообще) - 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.




--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 17.12.2006 20:52
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


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


continue;




никогда с таким не сталкивалась? что это обозначает?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 17.12.2006 20:57
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Справка Паскаля:
Цитата

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;



Сообщение отредактировано: Bokul - 17.12.2006 20:58


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 17.12.2006 21:05
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


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

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


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

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

Сообщение отредактировано: 18192123 - 17.12.2006 21:09
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 17.12.2006 21:08
Сообщение #6


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


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

Глюк форума:

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;



Сообщение отредактировано: Bokul - 17.12.2006 21:09


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 17.12.2006 21:16
Сообщение #7


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


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


Да, я уже поняла! сегодня когда выкладывала этот код, было тот самое!
Еще раз спасибо!!!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 17.12.2006 21:18
Сообщение #8


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


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

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


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 17.12.2006 21:18
Сообщение #9


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


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

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


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

Сообщение отредактировано: 18192123 - 17.12.2006 21:21
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 17.12.2006 21:20
Сообщение #10


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


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


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 17.12.2006 21:47
Сообщение #11


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


а можно как-нибудь без continue, а то наш препад, как всегда скажет: ".... я вам этого не объяснял"....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 17.12.2006 22:00
Сообщение #12


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Цитата
а можно как-нибудь без 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;


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 5.01.2007 12:08
Сообщение #13


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


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




Почему так, где я выделила красным цветом мы пишем одно и то же?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 5.01.2007 18:38
Сообщение #14


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Почему же одно и то же? Ты не заметила вот эту строчку:
s[4]:='0';

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


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 2:32
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"