Поиск:

Ответ в темуСоздание новой темы Создание опроса
> строки в Memo 
:(
    Опции темы
RaugaJ
Дата 17.6.2006, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 15.6.2006

Репутация: нет
Всего: нет



Тема вот в чем: имеется файл, который выводится в Мемо1, затем берем другой файл и ывводим его в Мемо2. Теперя нужно вычесть из первого второй и записать результат в Мемо3.

Мои действия: получил текст в char*-формате(массив char), теперь мне нужно весь текст разделить на массив строк(поскольку сравнение будет проходить построкам). Те приемы, которыми пользовался в Тurbo, в Builder  не прокатывают. Подскажите код плиз, и если кто знает, может есть какие-либо стандартные ф-ции в Builder, выполняющие поиск в Мемо?   
PM MAIL   Вверх
Mysterio
Дата 18.6.2006, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Планирующий
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 28.12.2004

Репутация: нет
Всего: нет



RaugaJ, если тебе нужно именно  с использованием char  тогда можно ловить строки, например, по символу Enter(13) + учитывать разбиения этих строк при изменении размеров компонента(т.е. визуально их будет больше). Гораздо проще и быстрее делается с использованием Memo1->Lines->Strings[x] типа AnsiString. Если исходный текст в char[], и не разделён, добавь .c_str(), что поможет преобразовать его к тому же AnsiStringу.

А как понять "вычесть из первого второй"? По числу символов или по повторениям, или ещё как? 
PM MAIL   Вверх
RaugaJ
Дата 18.6.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 15.6.2006

Репутация: нет
Всего: нет



Вычесть, значит оставить те строки, которые есть в первом и которых нет во втором.   
PM MAIL   Вверх
W0LF
Дата 18.6.2006, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: нет
Всего: 20



Вот тебе пример, правда писал давно, извини за некрасивый код, щас времени нет заниматься рефакторингом и читабельностью smile):
Код

void breakMemo(TMemo* Memo1,String*& finallyStringArray){
  int numberOfLines = Memo1->Lines->Capacity;
  finallyStringArray = new String[1000];
  int finallyStringNumber = 0;
  for(int i = 0; i < numberOfLines; i++){
        String sTmpLine = Memo1->Lines->Strings[i];
        char *cTmpLine = sTmpLine.c_str();
        int lengthOfLine = sTmpLine.Length();
        int positionInLine=0;
        int positionFloatLeft=0;
        int positionFloatRight=0;
        while(positionInLine != lengthOfLine){
                if (cTmpLine[positionInLine] != ' '){
                        positionFloatLeft = positionInLine;
                        for(int j = positionInLine; j < lengthOfLine; j++){
                                if (cTmpLine[j] == ' '){
                                        positionFloatRight = j;
                                        positionInLine = j;
                                        break;
                                }else
                                if (j==lengthOfLine-1){
                                        positionFloatRight = j+1;
                                        positionInLine = j;
                                        break;
                                }
                        }
                           String sFloat  =   sTmpLine.SubString(positionFloatLeft,positionFloatRight-positionFloatLeft+1);
                           finallyStringArray[finallyStringNumber] = String(sFloat);
                }          finallyStringNumber++;
                positionInLine++;
        }
  }
}

Это работающий код, везде стоит Float(sFloat, positionFloatRight и т.д), ибо я разбивал на вещественные, поэтому так и называл для себя, еще одна недоработка - выделение памяти под масиив finallyStringArray. Будет глупо перед этим вставить цикл, который будет искать кол-во слов в Memo(повторяющийся код). Лучше возьми std::vector, там динамическое выделение памяти, если не знаешь как, пиши, я тебе переделаю с std::vector, там быстро, но у меня щас ваще нет времени.
   

Это сообщение отредактировал(а) W0LF - 18.6.2006, 18:44


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
W0LF
Дата 18.6.2006, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: нет
Всего: 20



Так, немного освободился, и подумал, что некрасиво все-таки недаработанное давать. 
Так вот, самое простое использование std::vector без итераторов:
в функции поменять параметр "String*& finallyStringArray" на 
                                                     "std::vector<String>&  "finallyStringArr"
                  поменять строку "finallyStringArray[finallyStringNumber] = String /*даже не знаю, че я
                                               здесь String влепил smile*/ (sFloat);" на 
                                               "finallyStringArray.push_back(sFloat);"
Теперь объявление vector:
Код

#include <vector>;
std::vector<String> finallyStringArray;

Использование vector:
Код

String *s  = new  String[14];
for(int i=0;i<14;i++){
    s[i] = finallyStringArray.at(i);
}

Да, и еще, там немного неправильно слова резало:
замени "String sFloat  =   sTmpLine.SubString(positionFloatLeft,positionFloatRight-positionFloatLeft+1);" на
"String sFloat  =   sTmpLine.SubString(positionFloatLeft+1,positionFloatRight-positionFloatLeft);"
Это все, если разделитель - пробел, если нужен другой символ, то просто добавь его, например:
Код

if ((cTmpLine[j] == ' ')|| (cTmpLine[j] == ',')){
...
}

Все, высказался(выписался как-то неудобно smile ).  

Это сообщение отредактировал(а) W0LF - 18.6.2006, 19:48


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1060 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.