Блог им. Crazy_Trading
ESU97;19970910;001000000;934.00;934.00;934.00;934.00;0парсим простыми методами:
int start1() { int hFile, bool read = true; datetime tm1 = TimeCurrent(), tm2; string filename = "ES.TXT"; hFile = FileOpen(filename, FILE_CSV|FILE_READ, ';'); if (hFile<1) { Alert("Файл "+filename+" не найден!"); return(false); } while (read) { int i = ArraySize(HistBar); ArrayResize(HistBar,i+1); HistBar[i].NameB = FileReadString(hFile); string data = FileReadString(hFile); string data1 = FileReadString(hFile); HistBar[i].TimeB = conkdata(data, data1); HistBar[i].OpenB = FileReadString(hFile); HistBar[i].HighB = FileReadString(hFile); HistBar[i].LowB = FileReadString(hFile); HistBar[i].CloseB = FileReadString(hFile); HistBar[i].SizeB = FileReadString(hFile); if(FileIsEnding(hFile)==true) read = false; // Print(TimeToString(HistBar[i].TimeB, TIME_DATE|TIME_MINUTES ), " ", DoubleToStr(HistBar[i].OpenB, 2)," ",DoubleToStr(HistBar[i].HighB, 2)," ",DoubleToStr(HistBar[i].LowB, 2)," ",DoubleToStr(HistBar[i].CloseB, 2)," " ); } tm2 = TimeCurrent(); FileClose(hFile); Print(ArraySize(HistBar)); Print(TimeToString(tm1, TIME_DATE|TIME_SECONDS ) ," ",TimeToString(tm2, TIME_DATE|TIME_SECONDS ) ); return (0); } ///////////////////////////// datetime conkdata( string data, string data1) { datetime vzv = StrToTime(StringSubstr(data, 0, 4) + "."+ StringSubstr(data, 4, 2)+ "."+ StringSubstr(data, 6, 2)+ " "+ StringSubstr(data1, 0, 2)+ ":"+ StringSubstr(data1, 2, 2)); return(vzv); }и все вроде хорошо… но что то пошло не так ))
тоесть он просто считает количество строк в файле..
и...
и мт4 опять умер (((
resize в огромном цикле это нонсенс, попробуй сначала узнать количество строк и потом разово вызвать resize.
Судя по таким ошибкам в базовых вещах, ни о какой реализации более менее сложного алгоритма речи идти не может
учел ваши советы и исправил ошибки ))
Про строки я привел для примера, т.к. в некоторых компиляторах (старых, но все же встречается иногда) int является 16 битовым, т.е. всего 64000. Сталкивался с такой ошибкой у некоторых...
Но возможных нюансов намного больше, так что удачи в написании кода. В любом случае зависать из-за считывания строк не должно.
признаю что допустил ошибку в коде, и приношу свои извинения за свои слова в отношении вас.
еще раз пробежав по коду выявил ошибки.
и теперь 67 мегабайтный файл считывается за 3 секунды
ошибка была не только в РЕСАЙЗ, но и в синтаксисе...
а в нем как бы вот так:
за подсказку while (!FileIsEnding(hFile)) тоже большое сенкс