Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Форматирование текста через AnsiString в протоколе irc

68K
26 февраля 2011 года
ALLExFF
3 / / 26.02.2011
Приветствую всех, прошу не пинать за глупый вопрос но вот какая ситуация - недавно решил написать простенький irc клиент, на сокете в BCB6, но вот проблемка какая - форматирование ReceiveText для приемлимого вывода. Там неоходимо удалять часть текста, например текст вида
 
Код:
:irc.siteneme.ru NOTICE AUTH :*** Your codepage is 'CP1251'

необходимо преобразовать в
 
Код:
*** Your codepage is 'CP1251'

Почитав не мало про AnsiString и так же не мало поискав поисковиками я так и не нашел не чего нужного.
Для одной строки обработать не сложно, например
 
Код:
AnsiString Data = RichEdit1->Text;
int startpos = Data.Pos(":");  
  for (int i = 0; i < Data.Length(); i++)
  {
    if(Data.Pos(":") != 0)
    {
      Data.Delete(startpos,1);
    }
  }
  RichEdit1->Lines->Add(Data);

Но если несколько строк идут подряд, то уже получается ерунда. Надо как то прерывать цикл, и считать удаляемые позиции. Может кто подскажет как это сделать?
277
26 февраля 2011 года
arrjj
1.7K / / 26.01.2011
 
Код:
for(int x=0;x<RichEdit1->Lines->Count;x+=1)
{
    RichEdit1->Lines->Strings[x]=RichEdit1->Lines->Strings[x].Delete(1,RichEdit1->Lines->Strings[x].Pos(":"));
}
68K
02 марта 2011 года
ALLExFF
3 / / 26.02.2011
arrjj, спасибо за ответ!
А как производить поиск в самой переменной, так как с RichEdit был просто пример. В реальных условиях переменная Data будет получать данные из Socket1->Socket->ReceiveText();
что то вроде этого должно получится:
 
Код:
AnsiString Data = Socket1->Socket->ReceiveText(); // пример
//быдлокод
 for(int i = 1; i < Data.Pos("\n"); i++) //нужно форматировать по субстрокам(искать начало\конец строки)
  {
    Data.Delete(1,Data.SubString(1,i).Pos(" :"));
    //или Data.Delete(1,Data.Pos(" :")); или еще как нибудь(((
  }
  RichEdit1->Lines->Add(Data);

Так как в примере удаление идет по строкам, но в моем случае весь текст находится в одной переменной.
такой вот примерно ход мыслей, может кто подскажет как правильно сделать?
1
03 марта 2011 года
kot_
7.3K / / 20.01.2000
Что такое "форматировать по субстрокам"? Почему если используется AnsiString не наследовать от класса TStrings (TStringList например) и не использовать его методы для формирования списка строк?
По поводу замены символов - я бы использовал обычный цикл - вряд ли Pos тут будет особо эффективно - тебе все равно надо проверять всю строку. И кстати два замечания:
1. - я бы разделил получение и обработку строк.
2. - в задаче вполне достаточно использовать массив символов фиксированного размера - использование AnsiString здесь затратно и не эффективно.
68K
06 марта 2011 года
ALLExFF
3 / / 26.02.2011
kot_, спасибо за ответ)
Хотелось бы узнать как использовать массив фиксированного размера? Как я понял вы говорите о char, и как в нем производить поиск?
Может кто линк на нужную литературу даст по обработке символов, поиску в тексте и тд?
1
06 марта 2011 года
kot_
7.3K / / 20.01.2000
На самом деле тут необходимо эксперементировать. Фиксированный размер массива позволит избежать затратных выделений памяти - но вполне возможно что вся оптимизация будет потеряна на проверках выхода за пределы (например). Поэтому для начала надо понять будет ли выиграш в данном конкретном случае.
А в использовании массива фиксированной длины особой хитрости нет. Кури RFC 2812 в котором сказано, что размер строки сообщения и параметров не может превышать 512 символов. Нет смысла в динамическом выделении строк.
Вариантов как производить поиск - как минимум 3. Тем более тебе ведь не просто надо искать - тебе надо выделить команды, сообщение и параметры. Опять же - кури рфс.
332
09 марта 2011 года
Valiant
416 / / 27.09.2004
Может такой вариант подойдёт?
 
Код:
Data.LastDelimiter(":***")
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог