Автор |
Сообщение |
Сергей
Зарегистрирован: 16.03.2008
Сообщения: 168
|
Олег подскажи пожалуйста, читаю внешний файл данной формулой:
fh = fopen( "e:/ddd.txt", "r");
if( fh )
{
while( ! feof( fh ) )
{
X=StrRight(fgets( fh ), 4);
printf( X );
Q=StrToNum( X );
}
}
else
{
printf("ERROR: file can not be found (does not exist)");
}
файл постоянно наполняется числами, формула берет последние 4 из них, все нормально до поры до времени, потом вываливается сообщение об ошибке что Q не определена. Время появления ошибки разное с количеством строк в файле никак не связана. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Хм. Не знаю в чем дело. Как правило такоая ошибка возникает когда в функцию StrToNum() попадают не текстовые данные или пустое значение. Не текстовым данным взятся вроде неоткуда. Логично попробовать вставить перед StrToNum() проверку на непустое значение. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Сергей
Зарегистрирован: 16.03.2008
Сообщения: 168
|
000 писал(а): |
Хм. Не знаю в чем дело. Как правило такоая ошибка возникает когда в функцию StrToNum() попадают не текстовые данные или пустое значение. Не текстовым данным взятся вроде неоткуда. Логично попробовать вставить перед StrToNum() проверку на непустое значение. |
Как?)
Подскажи, а может такое действо вызывать символ переход на новую строку, мы его не видим но в любом текстовом файле он обязательно присутствует? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Блин. Откровенно говоря я не очень силен в чтении файлов и вообще работе с текстовыми данными... Попробовал сэммулировать подобную ошибку - нифига не вышло
В результате раздумий предлогаю немного изменить формулу. Вдруг поможет.
Код: |
fh = fopen( "C:/ddd.txt", "r");
X = Null;
if( fh )
{
while( ! feof( fh ) )
{
X=StrRight(fgets( fh ), 4);
printf( X );
Q=StrToNum( X );
}
}
else
{
printf("ERROR: file can not be found (does not exist)");
}
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
BabyBear
Советник
Зарегистрирован: 10.12.2008
Сообщения: 53
|
Факт такой - число не читается из файла.
причины, например, такие
- число написано не полностью или вообще не записано
причина может быть в записывающей программе, скорее всего она пыталась записать, когда ами заблокировал файл для своего чтения.
- число там записано, но прочитать его нельзя, так как записывающая программа заблокировала доступ к файлу на время записи. и ами не может открыть файл.
Всё это нужно тестровать на конкретном компьютере.
Для начала , я бы записывал все события в новый файл и посмотрел, в какой строке появляетя ошибка. |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
Сергей
Зарегистрирован: 16.03.2008
Сообщения: 168
|
BabyBear писал(а): |
Факт такой - число не читается из файла.
причины, например, такие
- число написано не полностью или вообще не записано
причина может быть в записывающей программе, скорее всего она пыталась записать, когда ами заблокировал файл для своего чтения.
- число там записано, но прочитать его нельзя, так как записывающая программа заблокировала доступ к файлу на время записи. и ами не может открыть файл.
Всё это нужно тестровать на конкретном компьютере.
Для начала , я бы записывал все события в новый файл и посмотрел, в какой строке появляетя ошибка. |
Все не то, она его по началу читает, запись не производится потом в какой то момент бац и выпадает хотя этот файл никто не трогает, возможен конфликт доступа к диску или переполнение где то. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А раз в этот файл запись производится не так часто, то может не читать его каждый раз а сперва проверить на дату/время последнего изменения функцией fgetstatus() и если она изменилась только тогда читать? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Сергей
Зарегистрирован: 16.03.2008
Сообщения: 168
|
000 писал(а): |
А раз в этот файл запись производится не так часто, то может не читать его каждый раз а сперва проверить на дату/время последнего изменения функцией fgetstatus() и если она изменилась только тогда читать? |
Не думаю что выход, все равно когда нибудь произойдет конфликт. Ладно фиг с ним с этим файлом, лучше сумму с утра сам руками забивать буду)
Пора водку пить) |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ну если это только раз в день надо делать, то руками надежнее полюбому. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Сергей
Зарегистрирован: 16.03.2008
Сообщения: 168
|
000 писал(а): |
Ну если это только раз в день надо делать, то руками надежнее полюбому. |
Обленился) |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|