| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > строки в Memo |
| Автор: RaugaJ 17.6.2006, 21:51 |
| Тема вот в чем: имеется файл, который выводится в Мемо1, затем берем другой файл и ывводим его в Мемо2. Теперя нужно вычесть из первого второй и записать результат в Мемо3. Мои действия: получил текст в char*-формате(массив char), теперь мне нужно весь текст разделить на массив строк(поскольку сравнение будет проходить построкам). Те приемы, которыми пользовался в Тurbo, в Builder не прокатывают. Подскажите код плиз, и если кто знает, может есть какие-либо стандартные ф-ции в Builder, выполняющие поиск в Мемо? |
| Автор: Mysterio 18.6.2006, 12:46 |
| RaugaJ, если тебе нужно именно с использованием char тогда можно ловить строки, например, по символу Enter(13) + учитывать разбиения этих строк при изменении размеров компонента(т.е. визуально их будет больше). Гораздо проще и быстрее делается с использованием Memo1->Lines->Strings[x] типа AnsiString. Если исходный текст в char[], и не разделён, добавь .c_str(), что поможет преобразовать его к тому же AnsiStringу. А как понять "вычесть из первого второй"? По числу символов или по повторениям, или ещё как? |
| Автор: RaugaJ 18.6.2006, 17:21 |
| Вычесть, значит оставить те строки, которые есть в первом и которых нет во втором. |
| Автор: W0LF 18.6.2006, 18:36 | ||
Вот тебе пример, правда писал давно, извини за некрасивый код, щас времени нет заниматься рефакторингом и читабельностью
Это работающий код, везде стоит Float(sFloat, positionFloatRight и т.д), ибо я разбивал на вещественные, поэтому так и называл для себя, еще одна недоработка - выделение памяти под масиив finallyStringArray. Будет глупо перед этим вставить цикл, который будет искать кол-во слов в Memo(повторяющийся код). Лучше возьми std::vector, там динамическое выделение памяти, если не знаешь как, пиши, я тебе переделаю с std::vector, там быстро, но у меня щас ваще нет времени. |
| Автор: W0LF 18.6.2006, 19:15 | ||||||
| Так, немного освободился, и подумал, что некрасиво все-таки недаработанное давать. Так вот, самое простое использование std::vector без итераторов: в функции поменять параметр "String*& finallyStringArray" на "std::vector<String>& "finallyStringArr" поменять строку "finallyStringArray[finallyStringNumber] = String /*даже не знаю, че я здесь String влепил "finallyStringArray.push_back(sFloat);" Теперь объявление vector:
Использование vector:
Да, и еще, там немного неправильно слова резало: замени "String sFloat = sTmpLine.SubString(positionFloatLeft,positionFloatRight-positionFloatLeft+1);" на "String sFloat = sTmpLine.SubString(positionFloatLeft+1,positionFloatRight-positionFloatLeft);" Это все, если разделитель - пробел, если нужен другой символ, то просто добавь его, например:
Все, высказался(выписался как-то неудобно |