Функция FileReadDatetime

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

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

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 файл с разделителями"?)

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

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

 
stringo:

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

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

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

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

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

 

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

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

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

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

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

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

 

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

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

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

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

 
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".

Причина обращения: