{
FileWrite(handle, abc_1, abc_2, abc_3, abc_4, abc_5);
FileClose(handle);
}>>
файл закрывается сразу же, при повторном его открытии указатель устанавливается в начало, т.е. файл полностью переписывается с начала.
if(handle>0)
{
FileWrite(handle, abc_1, abc_2, abc_3, abc_4, abc_5);
}
....
FileClose(handle);
запишем все, что нужно, потом в конце работы закроем файл.
FILE_CSV|
При записи в файл остается последняя запись.Предыдущие удаляются.
По описанию MQL4 онструкция FILE_READ|FILE_WRITE должна добавлять новую запись к старым.
Не получается. Подскажите где ошибка.
abc_1=Year();
abc_2=Month();
abc_3=Day();
abc_4=Hour();
abc_5=AccountEquity();
if(Minute()==00 && Hour()==12)
{
Print("Account equity = ",AccountEquity());
handle=FileOpen("my_equity.csv",FILE_CSV|,';');
if(handle>0)
{
FileWrite(handle, abc_1, abc_2, abc_3, abc_4, abc_5);
FileClose(handle);
}
}
С уважением, Анатолий
Указатель надо установить в конец файла
FileSeek(handle, 0, SEEK_END);
Спасибо всем! С File Seek() попробую.
Пока выкрутился так.............
int firstTime_1=1;
int handle;
int start()
{
................................................................................ .........................................
................................................................................ .........................................
if (firstTime_1==1)
{
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);}
firstTime_1=-1;
}
if(Minute()==00 && Hour()==12)
{
Print("Account equity = ",AccountEquity());
abc_1=Year();
abc_2=Month();
abc_3=Day();
abc_4=Hour();
abc_5=AccountEquity();
if(handle>0)
{
FileWrite(handle,abc_1,abc_2,abc_3,abc_4,abc_5);
// FileClose(handle);
}
}
................................................................................ .............................
................................................................................ .............................
return(0);
}
Вроде работает.
..................................................
.................................................
2004;9;7;12;10234.8542 |
2004;9;8;12;10234.8542 |
2004;9;9;12;10251.3542 |
2004;9;10;12;10350.0942 |
2004;9;13;12;10350.0942 |
2004;9;14;12;10350.0942 |
2004;9;15;12;10350.0942 |
2004;9;16;12;10165.443 |
2004;9;17;12;10482.4126 |
2004;9;20;12;10614.0626 |
.............................................
............................................
Если не описывть handle как глобальную переменную писать в файл
не будет (пустой). Без глобальной firstTime_1 то же ерунда разная получается.
С File Close() так и не разобрался. Куда ни приткнешь все равно только
последняя строка в записи. Снес FileClose. Вроде и без него работает.
Только файл занят все время до окончания тестирования. Хотелось
по другому. Открывать файл, писать в него, закрыть, снова открыть,
дописать и т. д.
Конструкция FILE_CSV|FILE_READ|FILE_WRITE по описанию языка должна это позволять.
int FileOpen( |
string filename, int mode, int delimiter=';') |
Открывает Файл для ввода и/или вывода. Возвращает файловый описатель
открытого файла или -1 в случае неудачи. Чтобы получить дополнительную
информацию об ошибке, необходимо вызвать функцию GetLastError().
Замечания: файлы могут открываться только в папке каталог_терминала\experts\files (каталог_терминала\tester\files в случае тестирования эксперта) или ее подпапках.
Нельзя одновременно использовать режимы FILE_BIN и FILE_CSV.
Если FILE_WRITE не комбинируется с FILE_READ, то будет открыт файл нулевой
длины. Даже если до открытия в файле были данные, то они будут
уничтожены. Если необходимо дописывать данные в существующий
файл, то его нужно открывать, используя комбинацию FILE_READ | FILE_WRITE.
Если FILE_READ не комбинируется с FILE_WRITE, то файл будет открыт только
в том случае, если он уже существует. Если файл не существует,
то создать его можно, используя режим FILE_WRITE.
Если возможно, то хотелось бы небольшой фрагмент кода на эту
тему посмотреть.
Заранее благодарен.
С уважением Анатолий.
Указатель надо установить в конец файла
FileSeek(handle, 0, SEEK_END);
Спасибо KimIV!
Все рулит. Нормально!
int start()
{
int handle;
if(Minute()==00 && Hour()==12)
{
Print("Account equity = ",AccountEquity());
abc_1=Year();
abc_2=Month();
abc_3=Day();
abc_4=Hour();
abc_5=AccountEquity();
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)
{
FileSeek(handle, 0, SEEK_END);
FileWrite(handle,abc_1,abc_2,abc_3,abc_4,abc_5);
FileClose(handle);
handle=0;
}
}
С уважением, Анатолий.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
По описанию MQL4 онструкция FILE_READ|FILE_WRITE должна добавлять новую запись к старым.
Не получается. Подскажите где ошибка.
abc_1=Year();
abc_2=Month();
abc_3=Day();
abc_4=Hour();
abc_5=AccountEquity();
if(Minute()==00 && Hour()==12)
{
Print("Account equity = ",AccountEquity());
handle=FileOpen("my_equity.csv",FILE_CSV|,';');
if(handle>0)
{
FileWrite(handle, abc_1, abc_2, abc_3, abc_4, abc_5);
FileClose(handle);
}
}
С уважением, Анатолий