Форум трейдеров » Торговые роботы, советники, индикаторы » Вопросы программирования
+ Подписаться
Страница 80 из 87 ПерваяПервая ... 30707879808182 ... ПоследняяПоследняя
  1. 2,682
    Комментарии
    28
    Темы
    2807
    Репутация Pro
    Аватар для sydiya  
    Сурововец

    6 Медалей
    Цитата Сообщение от Денис Давыдов Посмотреть сообщение
    Да, но ты ведь прерываешь операцию когда FileIsLineEnding является правдой, а это произойдёт, когда указатель достигнет конца строки, т.е. он будет в конце предпоследней строки, т.е. необходимо его на один байт вправо сдвинуть, что и сделает FileSeek(Handle,offset - 1,SEEK_END);
    Так я же offset сразу приравниваю к единице, в заголовке цикла. То есть цикл начинается с того что файловый указатель сдвигается на один бит от конца файла. В конце файла он и не будет не когда.
  2. 4,164
    Комментарии
    7
    Темы
    4265
    Репутация Pro
    Аватар для Денис Давыдов  
    Мастер форумных наук

    4 Медалей
    Цитата Сообщение от sydiya Посмотреть сообщение
    Так я же offset сразу приравниваю к единице, в заголовке цикла. То есть цикл начинается с того что файловый указатель сдвигается на один бит от конца файла. В конце файла он и не будет не когда.
    Так я и говорил что он будет в конце предпоследней строки, т.е. потом после прерывания цикла нужно сместить на 1 байт вправо, таким образом он встанет в начало следующей строки, т.е. последней :) вот от сюда и надо чтение выполнять

    Но у этого способа тоже есть минус, если строка будет только одна, то не совсем понятно чем закончится такая операция. От сюда вывод, что либо предложенный мной вариант (чтение всего файла с начала), либо вариант Sevrer'а
  3. 2,682
    Комментарии
    28
    Темы
    2807
    Репутация Pro
    Аватар для sydiya  
    Сурововец

    6 Медалей
    Цитата Сообщение от Денис Давыдов Посмотреть сообщение
    Так я и говорил что он будет в конце предпоследней строки, т.е. потом после прерывания цикла нужно сместить на 1 байт вправо, таким образом он встанет в начало следующей строки, т.е. последней :) вот от сюда и надо чтение выполнять
    Ну наконец то я понял о чем ты. Вопрос вот в чем? В строке где то 10 символов, это не считая пробелов. Я бы понял если бы счетчик показал 80 или больше, тогда понятно, что я пытаюсь прочитать предпоследний бит предпоследней строки. Но счетчик всегда показывает 7 и цикл прекращается. То есть указатель сдвигается на один бит и все. Почему?
  4. 4,164
    Комментарии
    7
    Темы
    4265
    Репутация Pro
    Аватар для Денис Давыдов  
    Мастер форумных наук

    4 Медалей
    Цитата Сообщение от sydiya Посмотреть сообщение
    Ну наконец то я понял о чем ты. Вопрос вот в чем? В строке где то 10 символов, это не считая пробелов. Я бы понял если бы счетчик показал 80 или больше, тогда понятно, что я пытаюсь прочитать предпоследний бит предпоследней строки. Но счетчик всегда показывает 7 и цикл прекращается. То есть указатель сдвигается на один бит и все. Почему?
    Сдвигается на 7 байт, биты тут ни при чём.
    Могу ошибаться, но насколько помню, то латинские символы занимают меньше чем 1 байт, в отличии например от кириллицы, т.е. строка "вестит" меньше чем количество в ней символов.
  5. 2,682
    Комментарии
    28
    Темы
    2807
    Репутация Pro
    Аватар для sydiya  
    Сурововец

    6 Медалей
    Хотя если вдуматься, я пишу файл тегами htm и последняя строка у меня всегда закрытие таблицы - FileWrite(Handle,"</table>");
    Блин это навевает на мысли. Строка в текстовом формате совсем не то что при открытии файла браузером или экселем. Наверное здесь собака и порылась. Я перепутал строки как они пишутся скажем в блокнот и как они выводятся потом в браузере.
  6. 2,682
    Комментарии
    28
    Темы
    2807
    Репутация Pro
    Аватар для sydiya  
    Сурововец

    6 Медалей
    Ты понял о чем я? Я пишу таблицу в htm, там при открытии ее браузером или экселем получается четкая таблица с заданной шириной столбцов. Но строка выводимая на экран совсем не то что записано в файл. Потому что это не csv.
    Стоит над этим подумать.
  7. 4,164
    Комментарии
    7
    Темы
    4265
    Репутация Pro
    Аватар для Денис Давыдов  
    Мастер форумных наук

    4 Медалей
    Цитата Сообщение от sydiya Посмотреть сообщение
    Ты понял о чем я? Я пишу таблицу в htm, там при открытии ее браузером или экселем получается четкая таблица с заданной шириной столбцов. Но строка выводимая на экран совсем не то что записано в файл. Потому что это не csv.
    Стоит над этим подумать.
    Ну HTML совсем по другому парсировать надо...
  8. 19
    Комментарии
    0
    Темы
    19
    Репутация Pro
     
    Новичок

    2 Медалей
    Цитата Сообщение от Денис Давыдов Посмотреть сообщение
    В справке MQL очень хорошо описано чтение/запись файла.

    ЗЫ: а почему вы пишете файл формата CSV, а читаете BIN?
    Потому что для меня это не совсем понятно. я пользуюсь справкой MQL и копипастом. там примеры для разных интсрументов но вот спомощью одного копипаста не получится собрать программу.
  9. 2,974
    Комментарии
    7
    Темы
    2995
    Репутация Pro
     
    Banned

    4 Медалей
    Цитата Сообщение от sydiya Посмотреть сообщение
    Проблема в том, как перевести файловый указатель именно в начало последней строки.
    Любая текстовая строка заканчивается одинаково..;)

    С конца файла-2 ищем комбинацию CRLF

    CR=13 //0x0D - carriage return -возврат каретки
    LF=10 //0x0A - line feed - перевод строки

    или, что проще, помним-используем текущеее начало последней строки, пока она не приобрела конечный вид, например в
    int LastLineOffset
    По заполнении-записи - LastLineOffset=конец файла
  10. 4,164
    Комментарии
    7
    Темы
    4265
    Репутация Pro
    Аватар для Денис Давыдов  
    Мастер форумных наук

    4 Медалей
    Цитата Сообщение от EQU Посмотреть сообщение
    CR=13 //0x0D - carriage return -возврат каретки
    LF=10 //0x0A - line feed - перевод строки
    А я раньше думал что только 13 заканчивает и переносит строку... :bow:

Вверх
РегистрацияX

чтобы писать, читать, комментировать