Ошибки, баги, вопросы - страница 3417
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Это демонстрационный пример, только закомментированные строки выкинул.
Какие ошибки?
компилятор вам про это наверняка сказал - там не строка передаётся а 1 символ
должно быть :
какой именно символ всё равно пока нет флага FILE_CSV
PS/ вы на С/C++ не писали очевидно ? это вредные ошибки, размерность съехала
компилятор вам про это наверняка сказал - там не строка передаётся а 1 символ
должно быть :
какой именно символ всё равно пока нет флага FILE_CSV
PS/ вы на С/C++ не писали очевидно ? это вредные ошибки, размерность съехала
Да, спасибо, не заметил. Даже в тех закомментированных строчках '\t' было.
Компилятор не ругался, странно.
Но на результат не влияет, UTF-8 всё равно не пишется, только или UTF-16, или CP-1251. И ошибку не выдаёт, просто 0 символов записано.
На С/C++ - мало и давно, ещё под MS-DOS.
Да, спасибо, не заметил. Даже в тех закомментированных строчках '\t' было.
Компилятор не ругался, странно.
Но на результат не влияет, UTF-8 всё равно не пишется, только или UTF-16, или CP-1251. И ошибку не выдаёт, просто 0 символов записано.
На С/C++ - мало и давно, ещё под MS-DOS.
и ещё флаг FILE_ANSI нужен, а FILE_UNICODE нет :-)
цитирую доки
FILE_UNICODE
64
Strings of UNICODE type (two byte symbols).
а UTF-8 - однобайтная кодировка :-)
и ещё флаг FILE_ANSI нужен, а FILE_UNICODE нет :-)
цитирую доки
FILE_UNICODE
64
Strings of UNICODE type (two byte symbols).
а UTF-8 - однобайтная кодировка :-)
Что FILE_UNICODE не нужен - это понятно, просто показвыаю, что и с ним не работает.
Насчёт однобайтной - очень и очень спорно )
Да и насчёт двухбайтной - как бы тоже )
Что FILE_UNICODE не нужен - это понятно, просто показвыаю, что и с ним не работает.
Насчёт однобайтной - очень и очень спорно )
Да и насчёт двухбайтной - как бы тоже )
вот магическое сочетание флагов, которые я использую :
int f=FileOpen(fileName,FILE_WRITE|FILE_SHARE_READ|FILE_TXT|FILE_ANSI,',',CP_UTF8);
FILE_TXT - говорит что это текст, FILE_ANSI - что однобайт, CP_UTF8 - предпочитаемая мной кодировка.
вот магическое сочетание флагов, которые я использую :
int f=FileOpen(fileName,FILE_WRITE|FILE_SHARE_READ|FILE_TXT|FILE_ANSI,',',CP_UTF8);
FILE_TXT - говорит что это текст, FILE_ANSI - что однобайт, CP_UTF8 - предпочитаемая мной кодировка.
Это всё понятно. Но! Это под виндой или под Wine? Что оно под виндой работает, я верю. А вот под Линуксом - не удалось заставить.
Возможно, какого-то пакета не хватает, у меня всё по минимуму стоит.под Линуксом - не удалось заставить.
MT4 и MT5 не работают одинаково с FileWriteString. Как пример, пришлось такой способ конвертации MT4->MT5 использовать, чтобы MT5 выдавал тот же результат, что и MT4.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Скрипты: StatsHTML
fxsaber, 2023.11.02 09:35
Однако, мне сразу стало понятно, в чем проблема, и быстро написал это. В ином же случае можно просто перебрать все возможные комбинации флагов. По комбинаторике их немного.
Возможно, имеет смысл проверить на линуксе MT4, а потом уже искать решение под MT5.MT4 и MT5 не работают одинаково с FileWriteString. Как пример, пришлось такой способ конвертации MT4->MT5 использовать, чтобы MT5 выдавал тот же результат, что и MT4.
Однако, мне сразу стало понятно, в чем проблема, и быстро написал это. В ином же случае можно просто перебрать все возможные комбинации флагов. По комбинаторике их немного.
Возможно, имеет смысл проверить на линуксе MT4, а потом уже искать решение под MT5.MT4 тут никаким боком, никогда с ним не работал, кроме перевода с него на MT5 пары индикаторов.
С флагами проблем нет, если только возможность записи в файл в определённой кодировке не зависит от флагов режима доступа.
Просто под Линуксом (Wine) не работает вывод в файл в кодировке UTF-8.
В CP-1251 и в UTF-16 - работает, а в UTF-8 - нет.
Если я не прав и кому-то удалось под Wine штатными средствами MT5 записать в файл UTF-8 - покажите, как.
Кстати, эта тема тут уже поднималась, рабочего решения никто не показал, разработчики проигнорили.
Я привёл код, воспроизводящий проблему https://www.mql5.com/ru/forum/1111/page3416#comment_50488072
Мне это не критично, но проблема существует.
Код, который вы предоставили, выполняет вставку нового элемента в двусвязный список на заданной позиции. Однако вы правильно заметили, что есть несколько проблем с текущей реализацией.
if(index>m_data_total || index<0) return(-1); : Эта строка проверяет, что индекс находится в правильных границах. Если индекс меньше нуля или больше общего количества элементов в списке, возвращается -1. Вполне верно, что на практике часто используют возможность вставки элемента в конец списка по индексу -1, но в вашей реализации так делать нельзя из-за этой проверки.
if(index==-1) ... : Этот блок кода должен позволить вставить элемент в конец списка, если указан индекс -1. Но, как вы правильно заметили, до этого места кода выполнение не дойдет из-за предыдущей проверки.
В остальных строках обрабатываются остающиеся случаи: вставка элемента перед текущим узлом ( m_curr_node ) или добавление элемента в конец списка, если указанного индекса не существует.
Хорошо подмечено, что в этом коде есть противоречия/баги, которые не позволяют ему работать должным образом. Это могут быть ошибки, сделанные программистом. Если вы хотите изменить этот код, чтобы он позволил вставлять элемент в конец списка по индексу -1, вы можете изменить проверку индекса следующим образом:
if(index > m_data_total || index < -1) return(-1);
Такой код позволит пропускать индекс -1.