![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Eskel |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: Илья Репутация: ![]() ![]() ![]() |
Задача такова. Создаешь файл с символьными данными. Делаешь процедуру, которая удаляет из файла все '#' КРОМЕ первой '#'.
Вот я не долго думая написал:
Я понимаю, что процедура косячная и работает далеко не всегда. Не подскажите как ее правильно написать? |
![]() ![]() |
Lapp |
![]()
Сообщение
#2
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
не долго думая написал: Как говаривал Люис Кэррол, "а подумать не мешало бы" ... процедура косячная и работает далеко не всегда. Не подскажите как ее правильно написать? ![]() Во-первых, хотя в твоей программе есть намеки на форматирование, оно такое, что лучше бы их не было.. ![]() type Далее.. Читать из файла и писать в него одновременно в принципе можно, но не во всех случаях желательно. Я бы даже сказал, нежелательно везде, кроме случаев, где этого избежать нельзя либо слишком накладно. И мне кажется, что это не тот случай.. Обычная схема такова: 1. пишешь во временный файл; 2. по окончании удаляешь исходный файл; 3. переименовываешь временный файл. Вот, примерно так: var Если я не прав, и тебе необходимо работать с одним файлом (например, по условию) - скажи, продолжим ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Eskel |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: Илья Репутация: ![]() ![]() ![]() |
Цитата Если я не прав, и тебе необходимо работать с одним файлом (например, по условию) - скажи, продолжим По заданию надо делать операции с одним файлом... Я подумал, что можно сделать с помощью дополнительной строки, куда я буду записывать нужное мне содержимое файла - получилось! Но преподаватель сказал, что длина строки всего 256 байт, а файл больше и значит работает не всегда... |
Eskel |
![]()
Сообщение
#4
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: Илья Репутация: ![]() ![]() ![]() |
while not eof(f1) do begin. Вот фрагмент процедуры. Е сли запустить прогу и вбить в файл 1##4, то она работает... Если же протестить ее несколько раз - вылезают ошибки... Во внешнем цикле я перебираю все элементы до конца. Далее считываю элемент. Если это не # - оставляю в покое, если #, то к n плюсую 1 и проверяю первая она или нет, а дальше я запутался... Вроде как в мозгах я понимаю, что надо считывать следующий элемент, потом переводить указатель на текущий и записывать seek(f1,i+1);. |
Lapp |
![]()
Сообщение
#5
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Именно. Нужно отслеживать отдельно позиции чтения и записи. Вот и все
![]() var Добавлено через 1 мин. Кстати, заметь, что позицию хорошо бы делать LongInt, а не integer, как у тебя. Иначе твой преподаватель опять скажет, что мало ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Eskel |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: Илья Репутация: ![]() ![]() ![]() |
Цитата Read(f,c); ошибка 100... Ошибка чтения с диска. Я думаю дело в указателях, пытаюсь разобраться ![]() Добавлено через 6 мин. procedure first(var f1:tyfile); Вот как я переписал под мою процедуру... Может опять прокосячил Как раз в моем любимом примере 1##4 вылетает. в 2###, например, норм работает) Сообщение отредактировано: Eskel - 22.12.2008 10:09 |
Lapp |
![]()
Сообщение
#7
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
ошибка 100... Ошибка чтения с диска. Я думаю дело в указателях, пытаюсь разобраться В каких указателях? Нету же никаких указателей.![]() Ошибка в том, что EoF сбивается после записи (точнее, после Seek). Извиняюсь. Вот исправленный вариант: var -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Eskel |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: Илья Репутация: ![]() ![]() ![]() |
Цитата В каких указателях? Нету же никаких указателей. Спасибо большое! Я имел ввиду seek ![]() |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 18:12 |