Всем здравствуйте !
Столкнулся с непонятным для себя. При чтении предварительно записанного файла, после считывания последнего значащего элемента выдается еще несколько пустых (= 0) элементов, причем в количестве равном одому обращению к процедуре в цикле. На форуме прочитал, что ошибка определения конца файла исправлена в build 203. Обрадовался, поскольку думал , что ошибка не моя. Обновил build 202 на 205. Проблема осталась. Посмотрите, пожалуйста кто не сильно занят. Где-то ошибка все же есть. Заранее благодарен. Анатолий.
А тебя После проверки считывается не одно значение а больше, и они естественно обнуляются.
Обычно вначале я записываю размер массива. А при считывании проблемы уже нету. Но на конец файла не проверяю.
Всем здравствуйте !
Столкнулся с непонятным для себя. При чтении предварительно записанного файла, после считывания последнего значащего элемента выдается еще несколько пустых (= 0) элементов, причем в количестве равном одому обращению к процедуре в цикле. На форуме прочитал, что ошибка определения конца файла исправлена в build 203. Обрадовался, поскольку думал , что ошибка не моя. Обновил build 202 на 205. Проблема осталась. Посмотрите, пожалуйста кто не сильно занят. Где-то ошибка все же есть. Заранее благодарен. Анатолий.
А тебя После проверки считывается не одно значение а больше, и они естественно обнуляются.
Обычно вначале я записываю размер массива. А при считывании проблемы уже нету. Но на конец файла не проверяю.
Спасибо Scriptong и Vinin !
Вставил определение размера файла FilleSise() и проверку текущей позиции FileTell().
Теперь все работает нормально. С уважением Анатолий.
if (firstTime_1==1) { handle=FileOpen("common_up_down_ind.csv",FILE_CSV|FILE_READ, ";"); if(handle<1) {Print("File (common_up_down_ind.csv) not found, the last error is ", GetLastError()); return(false);} firstTime_1=-1; } if(handle>0) int file_size=FileSize(handle); // определяет размер файла { while (!FileIsEnding(handle)) { if(FileTell(handle)==file_size)break; // прерывает процедуру считывания abc_1=FileReadNumber(handle); abc_2=FileReadNumber(handle); abc_3=FileReadNumber(handle); abc_4=FileReadNumber(handle); abc_5=FileReadNumber(handle); abc_6=FileReadNumber(handle); k=FileReadNumber(handle); year_1[k]=abc_1; month_1[k]=abc_2; day_1[k]=abc_3; hour_1[k]=abc_4; min_1[k]=abc_5; up_down[k]=abc_6; Print("общий принт ", year_1[k]," ",month_1[k]," ",day_1[k]," ",hour_1[k]," ",min_1[k]," ",up_down[k]," ",k); elements=k; } FileClose(handle); handle=0; }
Чтобы не заводить новую ветку...
Проблема похожая. Раньше с файлами практически не работал, помогите разобраться, пожалуйста!
Записал файл EURUSDvb.csv - во вложении - 100 строк по 8 чисел int. Пытаюсь читать. Вот фрагмент кода
int h_vb=FileOpen(sy+"vb.csv", FILE_CSV|FILE_READ); string st; if(h_vb>0) { Print("Читаем массив vb ",h_vb); for(l=0;l<K;l++) { st=""; for(j=0;j<N;j++) { vb[l,j]=FileReadNumber(h_vb); st=st+vb[l,j]+" "; } Print(" l=",l," ",st); } FileClose(h_vb); }
В распринтовке первая строка нормальная, остальные - нули (логфайл (2) во вложении).
Пытаюсь пойти другим путём: записать и считать не csv-файл, а массив в двоичный файл
int h_vb=FileOpen(sy+"vb.dat", FILE_BIN|FILE_WRITE|FILE_READ); Print("Записываем первый массив vb ",h_vb); if(h_vb>0) { FileWriteArray(h_vb,vb,N+1,kb*N); FileReadArray(h_vb,vb,N+1,kb*N); FileClose(h_vb); } for(l=0;l<kb;l++) { st=""; for(j=0;j<N;j++)st=st+vb[l,j]+" "; Print("l_b=",l," ",st); }
В результате (первый логфайл) опять одна строка - нормальная, потом - первый элемент второй строки, а до 29 строки опять нули, а дальше - снова нормально. Причем, если заменить N+1 на 0 или 1, картина качественно не меняется - нормально начинает работать с 28 строки. (Здесь K и kb равно 100, а N=8).
Такое подозрение, что может с неявным преобразованием типов что-то не так. Или я где-то что-то не то делаю?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Столкнулся с непонятным для себя. При чтении предварительно записанного файла, после считывания последнего значащего элемента выдается еще несколько пустых (= 0) элементов, причем в количестве равном одому обращению к процедуре в цикле. На форуме прочитал, что ошибка определения конца файла исправлена в build 203. Обрадовался, поскольку думал , что ошибка не моя. Обновил build 202 на 205. Проблема осталась. Посмотрите, пожалуйста кто не сильно занят. Где-то ошибка все же есть. Заранее благодарен. Анатолий.
Здесь фрагмент считывания.
здесь печать значений
здесь фрагмент записи в файл и сам файл - всего в 16 строк писалось.