Надо поискать начало последней строки, а потом уже читать. За концом файла ничего не записано, вот и не читает.
Вроде так должно работать, но не проверял. Функция FileIsLineEnding говорит, что мы нашли конец предидущей строки.
handle=FileOpen("my_equity.csv",FILE_CSV|FILE_READ|FILE_WRITE,';'); if(handle<1) {Print("File (my_equity) not found, the last error is ", GetLastError()); return(false);} if(handle>0) { double varray[6]; if(FileSize(handle) < 10) // Если файл новый (10 байт это от балды) varray[0] = 0; else { FileSeek(handle, -10, SEEK_END); // Почти в конец файла while(!FileIsLineEnding(handle)) FileSeek(handle, -1, SEEK_CUR); // Ищем конец предыдущей-начало последней строки FileReadArray(handle, varray, 0, 6); Print(varray[0], varray[1]); } if(varray[0]!=Day()){ FileSeek(handle, 0, SEEK_END); // Опять в конец FileWrite(handle, Day(),var1,var2,var3,var4,var5,var6); // Дописываем } FileClose(handle); handle=0; }
Не то немного, но за ссылку спасибо.
Надо поискать начало последней строки, а потом уже читать. За концом файла ничего не записано, вот и не читает.
Вроде так должно работать, но не проверял. Функция FileIsLineEnding говорит, что мы нашли конец предидущей строки.
handle=FileOpen("my_equity.csv",FILE_CSV|FILE_READ|FILE_WRITE,';'); if(handle<1) {Print("File (my_equity) not found, the last error is ", GetLastError()); return(false);} if(handle>0) { double varray[6]; if(FileSize(handle) < 10) // Если файл новый (10 байт это от балды) varray[0] = 0; else { FileSeek(handle, -10, SEEK_END); // Почти в конец файла while(!FileIsLineEnding(handle)) FileSeek(handle, -1, SEEK_CUR); // Ищем конец предыдущей-начало последней строки FileReadArray(handle, varray, 0, 6); Print(varray[0], varray[1]); } if(varray[0]!=Day()){ FileSeek(handle, 0, SEEK_END); // Опять в конец FileWrite(handle, Day(),var1,var2,var3,var4,var5,var6); // Дописываем } FileClose(handle); handle=0; }
Ага виснет, когда в файле одна строка. А так работает - проверил.
while(!FileIsLineEnding(handle)) { FileSeek(handle, -1, SEEK_CUR); // Ищем конец предыдущей-начало последней строки if(FileTell(handle) == 0) break; // Нашли начало файла }
Но FileReadArray здесь не проходит. Она читает только из двоичных файлов.
Придется использовать последовательность
double FileReadNumber( |
int handle) |
Чего-то странное. Похоже FileIsLineEnding не работает, потому как читается все время первая строка.
Вот файл
48;109.86;109.95;109.84;109.88;99
12;109.88;109.95;109.84;109.88;99
15;109.88;109.95;109.84;109.9;145
16;109.88;109.95;109.84;109.86;157
А вот результат
2007.11.13 13:13:27 FWrite USDJPY,H1: removed
2007.11.13 13:13:27 FWrite USDJPY,H1: 48 109.86
2007.11.13 13:13:26 FWrite USDJPY,H1: loaded successfully
2007.11.13 13:10:19 FWrite USDJPY,H1: removed
2007.11.13 13:10:19 FWrite USDJPY,H1: 48 109.86
2007.11.13 13:10:17 FWrite USDJPY,H1: loaded successfully
2007.11.13 13:10:04 FWrite USDJPY,H1: removed
2007.11.13 13:10:04 FWrite USDJPY,H1: 48 109.86
2007.11.13 13:10:03 FWrite USDJPY,H1: loaded successfully
Мда... FileIsLineEnding явно не работает. И так тоже не пашет.
while(FileTell(handle) > 0) { FileSeek(handle, -1, SEEK_CUR); // Ищем конец предыдущей-начало последней строки if(FileIsLineEnding(handle)) break; }
Вот работающий кусок. При условии, что в файле нет строк, только цифры.
while(FileTell(handle) > 0) { FileSeek(handle, -1, SEEK_CUR); // Ищем конец предыдущей-начало последней строки int n = FileTell(handle); // Запоминаем позицию FileReadNumber(handle); // Читаем число if(FileIsLineEnding(handle)) break; // Проверяем на конец строки FileSeek(handle,n-FileTell(handle),SEEK_CUR); // Возвращаем позицию }2007.11.13 14:55:41 FWrite USDJPY,H1: removed
2007.11.13 14:55:41 FWrite USDJPY,H1: 56 109.97
2007.11.13 14:55:40 FWrite USDJPY,H1: loaded successfully
2007.11.13 14:54:15 FWrite USDJPY,H1: removed
2007.11.13 14:54:15 FWrite USDJPY,H1: 52 109.97
2007.11.13 14:54:13 FWrite USDJPY,H1: loaded successfully
2007.11.13 14:50:04 FWrite USDJPY,H1: removed
2007.11.13 14:50:04 FWrite USDJPY,H1: 51 0.9614
2007.11.13 14:50:03 FWrite USDJPY,H1: loaded successfully
Отлично, спасибо!! :)
Что то я не нашел там самого кода .. может тупой..
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Запись проходит грамотно, а вот считывать как-то не получается, орет, что пытаюсь бинарники читать из цсв файла. На форуме уже второй день роюсь - не найду ничего.. Плиз, хелп. :)