Файловая ошибка 105

Общие вопросы: версии и диалекты, синтаксис языка, cтруктуры и типы данных (массивы, строки, списки...), обработка данных и т.д.
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

25 мар 2009, 16:03

Должна в любом случае, даже если r^.data есть пустой стринг, но rez должен быть обязательно потом close и чтобы при его rewrite до этого никаких ошибок не было. И все же советую rez связать по полному пути, например c:\result.txt, потому что может быть косяк с определением текущей директорией, которая вполне может указывать на "c:\documents and sett....\Рабочий стол" и задается в свойствах ярлыка, запускающего Pascal. Текущую папку можно узнать использовав GetDir
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

25 мар 2009, 16:41

Стекущей директорией не связано. Turbo Pascal 7.0 у меня не работал с файлами категорически. Win2k SP4. Когда началась проблема не знаю. Возможно, что после замены жесткого диска с маленького IDE-шного на большой SATA-шный. Не смог побороть. Забил. Решит 7-ой Turbo Pascal похоронить.
А для решения всяких студенческих задач использую 2 инструмента
1) PascalABC.NET и
2) Еще есть одна поделка - виндовая среда разработки, использующая родной борландовый TPCW. Называется это безобразие TPW.
На сколько я понимаю, теперь в учебных заведениях на этих двух штуках народ как раз и сидит в основном.
dr.Jekill
Сообщения: 509
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

25 мар 2009, 21:04

Совсем шарики за ролики заходят:

Код: Выделить всё

procedure ExitRez(r:TreePointer); 
begin  
if r<>nil then  
 begin    
  writeln(rez,r^.data);    
  Prefix(r^.left);    
  Prefix(r^.right);   
 end 
end;
А должно быть так:

Код: Выделить всё

procedure ExitRez(r:TreePointer); 
begin  
if r<>nil then  
 begin    
  writeln(rez,r^.data);    
  ExitRez(r^.left);    
  ExitRez(r^.right);   
 end 
end;
Как копировал, код остался с другой процедуры (процедура должна рекурсивно вызывать себя, а не другую процедуру).В файл пишет как нужно, но в отношении файла по-прежнему работает лишь такая схема: assign-rewrite-close-reset.Нарисовался еще один глюк: компилирую pas, всё компилируется, но при работе программы почти на завершающем этапе выкидывает, игноририруя readln. Сообщений об ошибке нет. Запускаю еще несколько раз с таким же успехом. После этого все запускается и работает корректно. Что это? Еще один глюк TPascal'я?Я так понял стоит попробовать на PascalABC.NET?
Нет религии выше истины
Аватара пользователя
AiK
Сообщения: 2274
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

26 мар 2009, 02:24

&quot писал(а):Когда началась проблема не знаю.
А это не та древняя проблема связанная с тем, что в TP при работе с файлами где-то используется delay (который криво реализован), и на быстрых процах просто TP не успевает открыть файл на запись?

Если оно, то опытные собаководы рекомендуют в секцию uses включить wincrt.
Даже самый дурацкий замысел можно воплотить мастерски
dr.Jekill
Сообщения: 509
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

26 мар 2009, 03:25

Раскопал wincrt.pas, подключил, Ctrl+F9, послушно ложил в папку с программой все запрашиваемые модули и в итоге в Winprocs.Pas 'Error 85: ";" expected'. Может у кого есть tpu'шный?
Нет религии выше истины
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

26 мар 2009, 09:28

Ну поставь ему, то что он хочет, не велика проблема, или вот
It's a long way to the top if you wanna rock'n'roll
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

26 мар 2009, 11:41

AiK писал(а):Если оно, то опытные собаководы рекомендуют в секцию uses включить wincrt.
Ну, мы еще в "ДОС-овские" времена пользовалисть библиотекой Turbo Professional, так что CRT не использовали, а использовали TpCRT.
Что любопытно, эти два модуля вообще конфликтовали. Т.е. если в собранной программе в каком-то месте цеплялся CRT, а в каком-то другом TpCRT, то при старте программа выдвала (на консоль) сообщение 'CTR/TpCRT conflict' и завершалась. Это в модуле TpCRT такая проверка была каким-то образом реализована.

Правда, не сорвсем ясно, как rewrite связана с CRT, ведь это стандартная функция (т.е. для ее вызова uses CRT делать не надо).
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

26 мар 2009, 16:51

&quot писал(а):Правда, не сорвсем ясно, как rewrite связана с CRT
А она и не связана, зато wincrt содержит AssignCrt, которая особым образом заполняет поля переменной типа Text, что позже позволяет rewrite работать как надо
It's a long way to the top if you wanna rock'n'roll
dr.Jekill
Сообщения: 509
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

28 мар 2009, 14:59

somewhere писал(а):Ну поставь ему, то что он хочет, не велика проблема, или вот
То же самое и точно в том же месте. Есть у кого-нибудь скомпилированный модуль? С ТP все по-прежнему, а в АВС всё работает корректно. Наверно перейду на него.Интресно, а кто в чем пишет?
Нет религии выше истины
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

28 мар 2009, 21:22

Да я сразу сказал, что это непоборимо.
Для студенческих задачек - ABC.
(Но надо учитывать, что там есть измеения и это уже фактически диалект)
Ответить