Всем привет.Пишу функцию для работы с тикетами из истории и застрял на определении колличества строк в файле txt.Пересмотрел ДОК пока что вот к чему дакопался.
в файле набор тикетов
123456789
987654321
123654987
в результате нужно получить колличество строк чтоб двигать указатель.Пока что ничего не получилось. Возможно проблема в указании разделителя string sep="\n";
А вам это точно нужно писать в файл?
Всем привет.Пишу функцию для работы с тикетами из истории и застрял на определении колличества строк в файле txt.Пересмотрел ДОК пока что вот к чему дакопался.
в файле набор тикетов
123456789
987654321
123654987
в результате нужно получить колличество строк чтоб двигать указатель.Пока что ничего не получилось. Возможно проблема в указании разделителя string sep="\n";
В документации есть сколько какие данные занимают памяти. Например double занимает 8 байт, но вся проблема в том, что записывая и читая в файл .txt или .csv не получается это правило, никак не получается переместить указатель чтобы попасть в начало строки, то 7, то 9 байт получается и никакой закономерности. НО!!! Если писать в файл .bin то всё получается.
Всем привет.Пишу функцию для работы с тикетами из истории и застрял на определении колличества строк в файле txt.Пересмотрел ДОК пока что вот к чему дакопался.
в файле набор тикетов
123456789
987654321
123654987
в результате нужно получить колличество строк чтоб двигать указатель.Пока что ничего не получилось. Возможно проблема в указании разделителя string sep="\n";
Придется все строки прочитать и подсчитать их количество, что-то вроде
int nstr = 0; while(!FileIsEnding(file_handle)) { str=FileReadString(file_handle); nstr++; }А вообще такое надо делать в бинарном виде, можно сразу читать-писать массивами, при этом первое число - длина массива.
Мне в принципе всё равно куда писать
В записи будет максимум 10 строк иными словами 10 номеров тикетов. Тут суть в том чтоб при определённых условиях определить колличество линий, взять с каждой линии номера тикетов и всунуть их в переменных для обработки. А писать нужно для того чтоб в случаи выключения советника и его переключении можно было продолжить торговать
Мне в принципе всё равно куда писать
В записи будет максимум 10 строк иными словами 10 номеров тикетов. Тут суть в том чтоб при определённых условиях определить колличество линий, взять с каждой линии номера тикетов и всунуть их в переменных для обработки. А писать нужно для того чтоб в случаи выключения советника и его переключении можно было продолжить торговать
Повторяю - пишите в бинарном виде сразу массивом и читайте массивом. Так как справкой вы явно пользоваться не умеете, скопипастил
input string InpFileName="data.bin"; input string InpDirectoryName="SomeFolder"; //+------------------------------------------------------------------+ //| Структура для хранения данных о ценах | //+------------------------------------------------------------------+ struct prices { datetime date; // дата double bid; // цена бид double ask; // цена аск }; //--- глобальные переменные int count=0; int size=20; string path=InpDirectoryName+"//"+InpFileName; prices arr[]; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- выделение памяти для массива ArrayResize(arr,size); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- запись оставшихся count строк, если count<n WriteData(count); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- сохраним данные в массив arr[count].date=TimeCurrent(); arr[count].bid=SymbolInfoDouble(Symbol(),SYMBOL_BID); arr[count].ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK); //--- отобразим текущие данные Print("Date = ",arr[count].date," Bid = ",arr[count].bid," Ask = ",arr[count].ask); //--- увеличим счетчик count++; //--- если массив заполнился, то записываем данные в файл и обнуляем его if(count==size) { WriteData(size); count=0; } } //+------------------------------------------------------------------+ //| Запись n элементов массива в файл | //+------------------------------------------------------------------+ void WriteData(const int n) { //--- откроем файл ResetLastError(); int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN); if(handle!=INVALID_HANDLE) { //--- запишем данные массива в конец файла FileSeek(handle,0,SEEK_END); FileWriteArray(handle,arr,0,n); //--- закрываем файл FileClose(handle); } else Print("Failed to open the file, error ",GetLastError()); }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет.Пишу функцию для работы с тикетами из истории и застрял на определении колличества строк в файле txt.Пересмотрел ДОК пока что вот к чему дакопался.
в файле набор тикетов
123456789
987654321
123654987
в результате нужно получить колличество строк чтоб двигать указатель.Пока что ничего не получилось. Возможно проблема в указании разделителя string sep="\n";