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

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

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

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


Пионер
**

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

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


Есть задача:
Дано целое чисто К (0<K<10) и текстовый файл, содержащий более К строк. Заменить в файле строку с номером К на строку S
Вот мой текст программы.

const
k=2;
var
f:text;
s:string;
st:integer;
put,a:string;
begin
s:='mouse';
st:=0;
put:='C:\pas\jkl';
assign(f,put);
reset(f);
while not eof(f) do
begin
read(f,a);
st:=st+1;
if st=k then
a:=s;
write(a);
end;
close(f);
readln;
end.



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


--------------------
Жизнь похожа на собачью упряжку: если не идёшь впереди, то всё время видишь одно и то же...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Программа вылетает потому что st переполняется. А это в свою очередь происходит потому, что процедурой Read надо пользоваться очень осторожно. Особенно когда в файле есть переводы строк (символы #13 и #10). Read будет бесконечно читать файл и возвращать пустую строку до тех пор, пока ты ReadLn-ом не прочтешь эти самые 2 символа... Очень аккуратно используй Read, если он тебе действительно необходим. Кстати, здесь, в этой задаче нужен именно ReadLn. Тогда программа не вылетает. Но и не выполняет задачу, потому что заданную строку на другую она не меняет.

Чтоб поменять - нужно перезаписать все строки в другой файл, по ходу заменив нужную на свое содержимое. А потом удалить старый файл и переназвать новый...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

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

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


Попробовала исправить, но при запуске всё равно выдаёт ошибку:


Эскизы прикрепленных изображений
Прикрепленное изображение

--------------------
Жизнь похожа на собачью упряжку: если не идёшь впереди, то всё время видишь одно и то же...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

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

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


Вообще вот что у меня получилось написать (только чувствую, что неправильно, но проверить у меня возможности нет, тк куда бы я не сохраняла, программа выдаёт ошибку):

const
k=2;
var
f,f1:text;
s:string;
st:integer;
put,a:string;
begin
s:='mouse';
st:=0;
put:='C:\pas\jkl';
assign(f,put);
{I-}
reset(f);
assign(f1,'C:\pas\kl');
reset(f1);
rewrite(f1);
while not eof(f) do
begin
readln(f,a);
write(f1,a);
st:=st+1;
if st=k then
a:=s;
write(a);
end;
close(f);
close(f1);
erase(f);
rename(f1,'C:\pas\jkl');
while not eof(f1) do
writeln(a);
readln;
end.




--------------------
Жизнь похожа на собачью упряжку: если не идёшь впереди, то всё время видишь одно и то же...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






И опять компилятор прав совершенно. Что такое ExitCode = 2? Это обычный виндовый ERROR_FILE_NOT_FOUND. Файла нет - вылетает ошибка и вместе с ней вся программа. Я смотрю, ты пытаешься обработать ошибку открытия? Только для этого надо отключить контроль ошибок ввода/вывода, ты этого не делаешь. Потому что {I-} и {$I-} - это разные вещи. У тебя - просто комментарий, а во втором случае - когда добавлен знак доллара - это уже директива компилятора.

И потом. Ну. допустим, отключила ты контроль. Дальше что? Reset вернул ошибку в IOResult, но программа работает дальше. Ты ж не обрабатываешь IOResult нигде, толку с того отключения? Просто взяла и заткнула программе рот, теперь она даже не будет сообщать об ошибках. Но если файл не открылся, а ты из него будешь читать - что произойдет?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

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

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


Только я не понимаю почему он не открывается... Я и переписывать файл пробовала, и пересохранять программу пробовала(кстати, после того как она мне ошибку выдаст, я не могу пересохранить этот файл. Приходится заводить новый и всё туда перекопировать)


--------------------
Жизнь похожа на собачью упряжку: если не идёшь впереди, то всё время видишь одно и то же...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 25.04.2024 18:49
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name