- Вопрос на грани телепатии, но видимо что-то я пропустил
- Экспорт Импорт глобальных переменных
- Чтение массива из файла
Всем привет! Прошу помощи: можно ли прочитать из файла значения (числа) и присвоить эти значения переменным? Если можно, то как (загрузка через "Параметры" не в счет)?
Например, вот так: Рецепты MQL5 - Разработка мультивалютного эксперта с неограниченным количеством параметров
Есть проблема: не читает в массив double per[1000] числа с запятой.. ну например 0.62 игнорируется:(
Сейчас приведу пример кода (по частям):
double per[1000]; ....... //--- Откроем файл для чтения из общей папки терминала int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName4,FILE_READ|FILE_WRITE|FILE_ANSI|FILE_COMMON); //--- Если хэндл файла получен if(file_handle!=INVALID_HANDLE) { ulong offset =0; // Смещение для определения положения файлового указателя string text =""; // В эту переменную будем записывать прочитанную строку //--- Читать, пока текущее положение файлового указателя не окажется в конце файла или программа не будет удалена while(!FileIsEnding(file_handle) || !IsStopped()) { //--- Читать до конца строки или пока программа не будет удалена while(!FileIsLineEnding(file_handle) || !IsStopped()) { //--- Прочитаем всю строку text=FileReadString(file_handle); //--- Получим положение указателя offset=FileTell(file_handle); //--- Переход на другую строку, если это не конец файла // Для этого увеличим смещение указателя файла if(!FileIsEnding(file_handle)) offset++; //--- Переведем его на следующую строку FileSeek(file_handle,offset,SEEK_SET); //--- Если строка не пустая if(text!="") { //--- Увеличим счетчик строк strings_count++; //--- Увеличим размер массива строк, ArrayResize(temporary_symbols,strings_count); //--- Запишем прочитанную строку в текущий индекс temporary_symbols[strings_count-1]=text; } //--- Выйдем из вложенного цикла break; } //--- Если это конец файла прервем основной цикл if(FileIsEnding(file_handle)) break; } //--- Закроем файл FileClose(file_handle);} //------------------Присваиваем элементам массива значения....... int h; for (h=0;h<strings_count;h++) {per[h]=temporary_symbols[h];}
Сами значения из файла выглядят так:
62
0.62
62
0.62
62
0.62
62
0.62
Так вот, при работе с этими значениями, десятичные проглатываются, т.е. происходит не последовательное присвоение значений, а распознаются только целые. Такое впечатление, что они не читаются при открытии файла... Но, если записать значения массива в другой текстовый файл, то десятичные там присутствуют... Может они не распознаются как числа, а остаются текстом??? Вообщем где-то трабла... Хелп
- www.mql5.com
StringToDouble?
Да, ее надо юзать.
int h; for (h=0;h<strings_count;h++) {per[h]=StringToDouble(temporary_symbols[h]);}
Так?
ЗЫ temporary_symbols символьная
Так?
ЗЫ temporary_symbols символьная
Да, я уже догадался что temporary_symbols это массив строк.
Кстати, думаю можно одним массивом per обойтись, без temporary_symbols. Сразу считывайте строку, ковертируйте ее с помощью StringToDouble, и пишите в массив per.
Да, я уже догадался что temporary_symbols это массив строк.
Кстати, думаю можно одним массивом per обойтись, без temporary_symbols.
Не фига не получается... :( Т.е. теперь десятичные стали не с точкой, а с запятой, но резалт тот же... Эти десятичные - параметры индюков... И индюки их не видят:(
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования