- Моментальные уведомления (алерты, Alert) в MetaTrader 5
- Помощь Copilot - Разработка программ
- Скачайте мобильное приложение MetaTrader 5 для Android
Плюс ещё вопрос. Каким магическим образом происходит вот такое:
04.01.2005;0;40.46;41.25;39.15;41.04;998;0 - прочитано с помощью FileReadString из первой строки, начиная с 19 позиции.
Brent Crude Oil;D;2005.01.04;000000;40.46;41.25;39.15;41.04;998;0 - собственно, строка.
Жирным выделено то, что меня удивляет. По идее функция читает строку, то есть просто как есть. Каким образом тогда произошло изменение формата даты?
Функция FileReadDatetime работает с файлами CSV (этот формат Вы имели в виду, говоря "txt файл с разделителями"?)
Покажите, как Вы открываете Ваш файл.
Функция FileReadDatetime работает с файлами CSV (этот формат Вы имели в виду, говоря "txt файл с разделителями"?)
Покажите, как Вы открываете Ваш файл.
fileHandle = FileOpen(fileName,FILE_READ|FILE_TXT|FILE_ANSI,';'); - сейчас вот так
Если сделать вот так:
fileHandle = FileOpen(fileName,FILE_READ|FILE_CSV,';');
а потом
if(FileSeek(fileHandle,startSeek,SEEK_CUR)==false)return false; - здесь startSeek доводит указатель до собственно даты.
dateTime = FileReadDatetime(fileHandle);
то в dateTime у меня оказывается текущая дата.
Функция FileReadDatetime работает с файлами CSV (этот формат Вы имели в виду, говоря "txt файл с разделителями"?)
Покажите, как Вы открываете Ваш файл.
Вот сам файл, который мне нужно прочитать.
Буду благодарен, если подскажите как правильно будет прочитать отсюда даты.
Велосипед то я уже изобрёл, и он вполне работает. Но думаю читать строку, разбивая на символы записывать в MqlDateTime структуру и преобразовывать в datetime далеко не самый правильный и оптимальный путь.
1. FileReadDateTime работает с файлами CSV. То есть, открытие файла с флагом FILE_TXT делает эту функцию бесполезной.
2. Ваш файл, с которым Вы работаете, юникодный или ANSI? В Ваших примерах первый FileOpen открывает файл с флагом FILE_ANSI, второй FileOpen - без этого флага
3. При ошибочном результате используйте функцию GetLastError
4. Прочитайте наконец документацию
1. FileReadDateTime работает с файлами CSV. То есть, открытие файла с флагом FILE_TXT делает эту функцию бесполезной.
2. Ваш файл, с которым Вы работаете, юникодный или ANSI? В Ваших примерах первый FileOpen открывает файл с флагом FILE_ANSI, второй FileOpen - без этого флага
3. При ошибочном результате используйте функцию GetLastError
4. Прочитайте наконец документацию
1. К открытию через FILE_TXT я пришёл по причине, что открытие через FILE_CSV выдавало ещё более странные результаты при чтении даты - всегда текущую дату.
2. Мой файл ANSI, в первом случае я открываю txt поэтому с флагом, во втором случае я меняю расширение на csv, поэтому и убираю флаг(так как в примерах из документации флаг кодировки не используется вместе с флагом FILE_CSV.
3.Результат не ошибочный с программной точки зрения. Я получаю текущую дату при чтении как csv. Никаких null, invalid и тд.
4.Хорошо, я перечитаю ещё раз документацию. Вовсе не отрицаю, что где-то что-то упустил.
Если приду к тем же результатам, то выложу полный код.
Файл, который Вы приложили выше - ANSI. Поэтому и открывать его надо с флагом FILE_ANSI
fileHandle = FileOpen(fileName,FILE_READ|FILE_CSV|FILE_ANSI,';');
Так как структура файла Вам известна, то и не надо делать никаких файл-сиков - просто вычитывайте поле за полем, строка за строкой
Кроме этого замечание - в Вашем файле нет datetime в чистом виде. Отдельно дата в виде YYYY.MM.DD и отдельно время в виде HHMISS (без разделителей между часами, минутами и секундами). Видимо, Ваше обходное решение является правильным и лучше использовать его, а не FileReadDatetime
Файл, который Вы приложили выше - ANSI. Поэтому и открывать его надо с флагом FILE_ANSI
Так как структура файла Вам известна, то и не надо делать никаких файл-сиков - просто вычитывайте поле за полем, строка за строкой
Кроме этого замечание - в Вашем файле нет datetime в чистом виде. Отдельно дата в виде YYYY.MM.DD и отдельно время в виде HHMISS (без разделителей между часами, минутами и секундами). Видимо, Ваше обходное решение является правильным и лучше использовать его, а не FileReadDatetime
FileReadDatetime
Читает из файла типа CSV строку одного из форматов: "YYYY.MM.DD HH:MI:SS", "YYYY.MM.DD" или "HH:MI:SS" - и преобразует её в значение типа datetime.
Я хотел использовать второй вариант формата "YYYY.MM.DD".
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования