Всем привет !
стандартной функцией считываю строку из файла: word1 = FileReadString(filehandle); Это наименование инструмента.
затем при сравнение этого значение в цикле мне даёт разную длину строки , то есть если word1 = "EURUSD" а длина строки равно то 6 то 7 то 8 символов (приложено в картинке)
в чем дело ?
соответственно в цикле не корректен результат сравнения ...
Код, как всегда, секретен, а мы экстрасенсы.
Всем привет !
стандартной функцией считываю строку из файла: word1 = FileReadString(filehandle); Это наименование инструмента.
затем при сравнение этого значение в цикле мне даёт разную длину строки , то есть если word1 = "EURUSD" а длина строки равно то 6 то 7 то 8 символов (приложено в картинке)
в чем дело ?
соответственно в цикле не корректен результат сравнения ...
на правах мастера телепатического восприятия: уберите из параметров FileOpen : FILE_CSV
рад что дал повод веселью )
подумал что не суть в коде . хотел обратить внимание на картинке - сравнивается переменные symb и word1, и почему тип значения у symb "string &" ? и длина визуально у word1 = 6, но показывает = lenght = 8 (а бывает что = 7 или 6)
void fileRe_Write(string symb) { int filehandle1=FileOpen("signalCrossRed_.csv",FILE_CSV | FILE_READ | FILE_WRITE,";"); if(filehandle1==INVALID_HANDLE) {Print("Операция FileRe_Write signalCrossRed_.csv, ошибка ",GetLastError()); return ;} string word1 , word2; FileSeek(filehandle,0,SEEK_SET); while(!FileIsEnding(filehandle)) { //--- прочитаем строку word1 = FileReadString(filehandle); word2 = FileReadString(filehandle); if (word1 != symb) { FileWrite(filehandle1,word1, word2); } } FileClose(filehandle); FileClose(filehandle1); FileCopy("signalCrossRed_.csv",0,"signalCrossRed.csv",FILE_REWRITE); FileDelete("signalCrossRed_.csv"); filehandle=FileOpen("signalCrossRed.csv",FILE_CSV | FILE_READ | FILE_WRITE ,";"); if (filehandle==INVALID_HANDLE) {Print("Операция__ FileRe_Write signalCrossRed.csv, ошибка ",GetLastError()); return ;} }
на правах мастера телепатического восприятия: уберите из параметров FileOpen : FILE_CSV
это не помогло ....
// флаги функции FileOpen #define FILE_READ_UTF8 (int)(FILE_SHARE_READ|FILE_ANSI) #define FILE_WRITE_UTF8 (int)(FILE_READ|FILE_WRITE|FILE_ANSI) #define FILE_READ_UNICODE (int)(FILE_SHARE_READ|FILE_UNICODE) #define FILE_WRITE_UNICODE (int)(FILE_READ|FILE_WRITE|FILE_UNICODE) // ----------------------------------------------------------------------------- // Загрузить текстовый файл // ----------------------------------------------------------------------------- static string UFile::LoadText(string path, int flags, CArrayString *lines = NULL) { string sdlm = ""; string line, text; // загружаем текст по-строчно ResetLastError(); uint codePage = (flags == FILE_READ_UNICODE) ? CP_ACP : CP_UTF8; if (MQLInfoInteger(MQL_TESTER)) flags |= FILE_COMMON; int file = FileOpen(path, flags, '\n', codePage); if(file != INVALID_HANDLE) { text = ""; while(!FileIsEnding(file)) { line = FileReadString(file); if (lines != NULL) lines.Add(line); text += sdlm + line; sdlm = "\n"; } FileClose(file); } // проверяем код ошибки int rcode = GetLastError(); if (rcode != ERR_SUCCESS) { PrintFormat("%s / ERROR: %i / %s", __FUNCTION__, rcode, path); } return text; } // ----------------------------------------------------------------------------- // Сохранить текстовый файл (по умолчанию в UTF-8 с добавлением в конец файла) // ----------------------------------------------------------------------------- static bool UFile::SaveText(string text, string path, int flags = FILE_WRITE_UTF8, bool reset = false) { // если текст нужно переписать, то удаляем файл if (reset && FileIsExist(path)) FileDelete(path); // сохраняем текст ResetLastError(); uint codePage = (flags == FILE_WRITE_UNICODE) ? CP_ACP : CP_UTF8; if (MQLInfoInteger(MQL_TESTER)) flags |= FILE_COMMON; int file = FileOpen(path, flags, '\t', codePage); if(file != INVALID_HANDLE && FileSeek(file, 0, SEEK_END)) { FileWriteString(file, text); FileClose(file); } // проверяем код ошибки int rcode = GetLastError(); if (rcode != ERR_SUCCESS) { PrintFormat("%s / ERROR: %i / %s", __FUNCTION__, rcode, path); } return (rcode == ERR_SUCCESS); }
рад что дал повод веселью )
подумал что не суть в коде . хотел обратить внимание на картинке - сравнивается переменные symb и word1, и почему тип значения у symb "string &" ? и длина визуально у word1 = 6, но показывает = lenght = 8 (а бывает что = 7 или 6)
такой код после запуска должен делать из файла помойку..
читает и пишет в произвольные места, заметая следы :-) его даже править бесполезно
и все прочие ошибки - производные
Взять ту строку с "неправильной" длиной и пройти по ней циклом с StringGetCharacter, посмотреть конкретно, в какой позиции какой символ.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет !
стандартной функцией считываю строку из файла: word1 = FileReadString(filehandle); Это наименование инструмента.
затем при сравнение этого значение в цикле мне даёт разную длину строки , то есть если word1 = "EURUSD" а длина строки равно то 6 то 7 то 8 символов (приложено в картинке)
в чем дело ?
соответственно в цикле не корректен результат сравнения ...