А код не прикладываете потому что он секретный?
Без кода трудно будет сказать что-то. Действительно телепатией придется пользоваться.
А код не прикладываете потому что он секретный?
Без кода трудно будет сказать что-то. Действительно телепатией придется пользоваться.
Код большой. Дело не в коде. Вот был файл, нем по 1 числу в строке. Бот читает число как символ и присваивает переменной, а переменная - это один из значений индюка. И все работало замечательно и долго на протяжении полугода. Толи новый билд какие-то внес изменения, но теперь все индюки пляшут и не могу понять, что не так стало читаться.. Т.е у меня вопрос не почему именно у меня такая проблема, а нет ли у других таких проблем в связи с новыми билдами? Речь о последнем месяце... Я месяц бота не тестил, пока вдруг у меня терминал на серваке не завис
Всё это лирика. Пока нет кода говорить не о чем. Большой код - сделай маленький. Демонстрацию проблемы сделай. Не сделаешь, - не морочь людям голову "изменениями терминала", а ищи ошибки в коде.
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_ANSI|FILE_COMMON); //--- Если хэндл файла получен if(file_handle!=INVALID_HANDLE) { ulong offset =0; // Смещение для определения положения файлового указателя string text =""; // В эту переменную будем записывать прочитанную строку //--- Читать, пока текущее положение файлового указателя не окажется в конце файла или программа не будет удалена while(!FileIsEnding(file_handle) || !IsStopped()) { //--- Читать до конца строки или пока программа не будет удалена while(!FileIsLineEnding(file_handle) || !IsStopped()) { //--- Прочитаем всю строку text=FileReadString(file_handle); //--- Получим положение указателя offset=FileTell(file_handle); //--- Переход на другую строку, если это не конец файла // Для этого увеличим смещение указателя файла if(!FileIsEnding(file_handle)) offset++; //--- Переведем его на следующую строку FileSeek(file_handle,offset,SEEK_SET); //--- Если строка не пустая if(text!="") { //--- Увеличим счетчик строк strings_count++; //--- Увеличим размер массива строк, ArrayResize(peremennye,strings_count); //--- Запишем прочитанную строку в текущий индекс peremennye[strings_count-1]=text; } //--- Выйдем из вложенного цикла break; } //--- Если это конец файла прервем основной цикл if(FileIsEnding(file_handle)) break; } //--- Закроем файл FileClose(file_handle);}
Вот этот код читает данные из файла.
Вот кусок файла к прочтению
0
0
0
1
0
0
0
0
0
0
0
0
0
0
10
0
0
0
а вот результат (читать снизу вверх):
2013.12.25 01:04:42.257 2000.01.01 00:00:00 0 и следом ошибка размера массива.
2013.12.25 01:04:42.257 2000.01.01 00:00:00 0.0
2013.12.25 01:04:42.257 2000.01.01 00:00:00 0.0
2013.12.25 01:04:42.257 2000.01.01 00:00:00 10
2013.12.25 01:04:42.257 2000.01.01 00:00:00 0
2013.12.25 01:04:42.257 2000.01.01 00:00:00 0
2013.12.25 01:04:42.257 2000.01.01 00:00:00 0
2013.12.25 01:04:42.257 2000.01.01 00:00:00 0
2013.12.25 01:04:42.257 2000.01.01 00:00:00 0
2013.12.25 01:04:42.257 2000.01.01 00:00:00 0
Получается, что сейчас данные читаются не последовательно, а через интервал... и не понятно через какой. Может кодировка влияет при записи в файл?
Пишется так
filehandle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_ANSI|FILE_COMMON); FileWrite(filehandle,a);FileSeek(filehandle,0,SEEK_END);
и так далее
Полюбому что-то изменилось. Код ни при чем. Все работало как часы. Поэтому и формулирую проблему: "какие изменения произошли в последнее время при чтении/записи в фалы?"
Вот этот код читает данные из файла.
Вот кусок файла к прочтению
Не советывал бы использовать FileSeek() для текстовых файлов. Вообще никогда. Это сервис для файлов с произвольным побайтным доступом, а никак не для текстовых. Если пользуешься на свой страх и риск - должен отдавать себе отчёт в том, что надёжной работы может и не быть. Короче, не советую даже сервисдеск напрягать. Лучше переделай по человечески.
Т.е. читай только всё подряд, от начала и до конца, файловый указатель "вручную" не переставляй. Всю логику отлаживай в рамках этих ограничений. И будет тебе щастье.
Не советывал бы использовать FileSeek() для текстовых файлов. Вообще никогда. Это сервис для файлов с произвольным побыйтным доступом, а никак не для текстовых. Если пользуешься на свой страх и риск - должен отдавать себе отчёт в том что надёжной работы может и не быть. Короче, не советую даже сервисдеск напрягать. Лучше переделай по человечески.
Т.е. читай только всё подряд, от начала и до конца, файловый указатель "вручную" не переставляй. Всю логику отлаживай в рамках этих ограничений. И будет тебе щастье.
А можешь привести кусок кода? Чем заменить?
Получается, что сейчас данные читаются не последовательно, а через интервал... и не понятно через какой. Может кодировка влияет при записи в файл?
...
Полюбому что-то изменилось. Код ни при чем. Все работало как часы. Поэтому и формулирую проблему: "какие изменения произошли в последнее время при чтении/записи в фалы?"
У меня тоже такая проблема возникла недавно. Сервисдеск помог. ) Теперь это нужно делать вот так. При открытии файла указать разделитель (выделено красным):
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_ANSI|FILE_COMMON,"\n");
Файловый указатель в Вашем примере больше не нужен. В итоге всё даже ещё проще стало, чем было раньше.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет!
У меня вдруг стали данные из файлов грузится криво. Ничего не трогал месяц как. Все работало. Из файлов значения индюков подгружаются. Полгода все норм, а теперь все скачет.
Данные подгружаются в сточный массив и потом присваиваются переменной через StringToDouble. Кстати строчный массив раньше выглядел так:
string peremennye[];
а теперь на загрузке 10 элемента выдает эррей аут оф рендже. Что за фигня... ниче не понимаю... До сегодня полгода все работало...