Скачать MetaTrader 5

Функция FileReadDatetime

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Fannasankh
120
Fannasankh 2015.02.26 21:07 
Подскажите, пожалуйста, а функция FileReadDatetime читает данные из txt файла с разделителями без учета разделителей? То есть от текущего положения до конца строки? Есть ли вариант прочитать значение типа datetime от текущего положения до разделителя, не изобретая своих функций?
Fannasankh
120
Fannasankh 2015.02.26 21:23  

Плюс ещё вопрос. Каким магическим образом происходит вот такое:

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 - собственно, строка.


Жирным выделено то, что меня удивляет. По идее функция читает строку, то есть просто как есть. Каким образом тогда произошло изменение формата даты?

Slava
Модератор
6915
Slava 2015.02.27 07:59  

Функция FileReadDatetime работает с файлами CSV (этот формат Вы имели в виду, говоря "txt файл с разделителями"?)

Покажите, как Вы открываете Ваш файл.

Fannasankh
120
Fannasankh 2015.02.27 15:18  
stringo:

Функция 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 у меня оказывается текущая дата.

Fannasankh
120
Fannasankh 2015.02.27 15:24  
stringo:

Функция FileReadDatetime работает с файлами CSV (этот формат Вы имели в виду, говоря "txt файл с разделителями"?)

Покажите, как Вы открываете Ваш файл.

Вот сам файл, который мне нужно прочитать. 

Буду благодарен, если подскажите как правильно будет прочитать отсюда даты.

Велосипед то я уже изобрёл, и он вполне работает. Но думаю читать строку, разбивая на символы записывать в MqlDateTime структуру и преобразовывать в datetime далеко не самый правильный и оптимальный путь.

Slava
Модератор
6915
Slava 2015.02.27 15:30  

1. FileReadDateTime работает с файлами CSV. То есть, открытие файла с флагом FILE_TXT делает эту функцию бесполезной.

2. Ваш файл, с которым Вы работаете, юникодный или ANSI? В Ваших примерах первый FileOpen открывает файл с флагом FILE_ANSI, второй FileOpen - без этого флага

3. При ошибочном результате используйте функцию GetLastError

4. Прочитайте наконец документацию

Fannasankh
120
Fannasankh 2015.02.27 15:36  
stringo:

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.Хорошо, я перечитаю ещё раз документацию. Вовсе не отрицаю, что где-то что-то упустил.

Если приду к тем же результатам, то выложу полный код.

Slava
Модератор
6915
Slava 2015.02.27 16:14  

Файл, который Вы приложили выше - ANSI. Поэтому и открывать его надо с флагом FILE_ANSI

fileHandle   = FileOpen(fileName,FILE_READ|FILE_CSV|FILE_ANSI,';');

Так как структура файла Вам известна, то и не надо делать никаких файл-сиков - просто вычитывайте поле за полем, строка за строкой

Кроме этого замечание - в Вашем файле нет datetime в чистом виде. Отдельно дата в виде YYYY.MM.DD и отдельно время в виде HHMISS (без разделителей между часами, минутами и секундами). Видимо, Ваше обходное решение является правильным и лучше использовать его, а не FileReadDatetime

Fannasankh
120
Fannasankh 2015.02.27 17:24  
stringo:

Файл, который Вы приложили выше - ANSI. Поэтому и открывать его надо с флагом FILE_ANSI

Так как структура файла Вам известна, то и не надо делать никаких файл-сиков - просто вычитывайте поле за полем, строка за строкой

Кроме этого замечание - в Вашем файле нет datetime в чистом виде. Отдельно дата в виде YYYY.MM.DD и отдельно время в виде HHMISS (без разделителей между часами, минутами и секундами). Видимо, Ваше обходное решение является правильным и лучше использовать его, а не FileReadDatetime

Моё желание использовать FileReadDatetime основано было на вот чём:

FileReadDatetime

Читает из файла типа CSV строку одного из форматов: "YYYY.MM.DD HH:MI:SS", "YYYY.MM.DD" или "HH:MI:SS" - и преобразует её в значение типа datetime.

Я хотел использовать второй вариант формата "YYYY.MM.DD".

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий