Файловый указатель - страница 2

 
Mihail Marchukajtes:
Вопрос, каким макаром начать двигаться с конца файла в сторону начала?
Если как я предложил, то передвигая указатель на один байт назад и читая байт. Наверное, можно даже, открыв как текст. Только ANSI, для простоты.
 
Mihail Marchukajtes:
Таки я так и думал. Переместить указатель в конец файла, начать считывание в обратную сторону до первого символа конца строки, как только символ будет достигнут, знамо последняя строка будет уже просчитана. Вопрос, каким макаром начать двигаться с конца файла в сторону начала?

От конца файла минус количество байт занимаемых строкой.

 
Проблема в том что длинна строки не известна. Возможно ли перемещатся по строке побуквенно? Файл таки текстовый....
 
Mihail Marchukajtes:
Проблема в том что длинна строки не известна. Возможно ли перемещатся по строке побуквенно? Файл таки текстовый....

Каждый символ занимает, кажется 2 байта. Вот и читайте посимвольно если получится. Я не проверял.

 
Mihail Marchukajtes:
Коллеги подскажите как красиво и не трудозатратно установить файловый указатель в начало последней строки csv файла. А то всё решения которые мне приходят вижу уж больно трудоёмкие. Спасибо!!!

Если хотите быстро и красиво, то надо менять формат записываемых данных.

1. Для каждой строки выделять одинаковое максимальное количество символов а неиспользуемые символы в конце записать нулями. Тогда сразу можно определить позицию начала любой строки.

2. Использовать бинарный файл, тогда простой читаемости не будет.

 
Aliaksandr Hryshyn:

Если хотите быстро и красиво, то надо менять формат записываемых данных.

1. Для каждой строки выделять одинаковое максимальное количество символов а неиспользуемые символы в конце записать нулями. Тогда сразу можно определить позицию начала любой строки.

2. Использовать бинарный файл, тогда простой читаемости не будет.

Думаю с нулями есть костыль, не будешь точно знать реальный это ноль или мнимый. Ну это так.. мысли в слух. Спасибо всем откликнувшимся. Благодарю за направления мысли!!!
 
Mihail Marchukajtes:

Странный Вы человек. Во вложении файл. Необходимо установить указатель в начало последней строки. Что тут ещё не понятного?

#include <Files\FileTxt.mqh>
CFileTxt f;
//+------------------------------------------------------------------+
void OnStart()
{
   f.Open("Si_Splice_Del.csv", FILE_READ | FILE_WRITE | FILE_COMMON);
   ulong prev_fseek = 0;
   while(!f.IsEnding())
   {
      prev_fseek = f.Tell();
      f.ReadString();
   }
   f.Seek(prev_fseek, SEEK_SET);
   Print("last row = ", f.ReadString());
}
//+------------------------------------------------------------------+

2020.04.15 09:19:41.849 tst_f (EURUSD,H1) last row = 2020.04.13 23:30:00,221

в целом работает, но еще проверки на ошибки нужно сделать
 
Igor Makanu:

2020.04.15 09:19:41.849 tst_f (EURUSD,H1) last row = 2020.04.13 23:30:00,221

в целом работает, но еще проверки на ошибки нужно сделать
ВОТ!!!!! ВОТ о чём я и говорил. Кратко, локонично и безумно надёжно. То есть я так понимаю что установить указатель на начало последней строки нужно использовать prev_fseek. Благодарствую серый ёж :-)
 
Mihail Marchukajtes:
ВОТ!!!!! ВОТ о чём я и говорил. Кратко, локонично и безумно надёжно. То есть я так понимаю что установить указатель на начало последней строки нужно использовать prev_fseek. Благодарствую серый ёж :-)

Только неоправданно медленно, если файл большой.

 
Andrey Khatimlianskii:

Только неоправданно медленно, если файл большой.

можно и с конца файла прочитать, но по моему топикстартеру хотя бы с файловыми операциями разобраться ))))