Форматирование текста через AnsiString в протоколе irc
Код:
: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);
int startpos = Data.Pos(":");
for (int i = 0; i < Data.Length(); i++)
{
if(Data.Pos(":") != 0)
{
Data.Delete(startpos,1);
}
}
RichEdit1->Lines->Add(Data);
Но если несколько строк идут подряд, то уже получается ерунда. Надо как то прерывать цикл, и считать удаляемые позиции. Может кто подскажет как это сделать?
Код:
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(":"));
}
{
RichEdit1->Lines->Strings[x]=RichEdit1->Lines->Strings[x].Delete(1,RichEdit1->Lines->Strings[x].Pos(":"));
}
А как производить поиск в самой переменной, так как с 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);
//быдлокод
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);
Так как в примере удаление идет по строкам, но в моем случае весь текст находится в одной переменной.
такой вот примерно ход мыслей, может кто подскажет как правильно сделать?
По поводу замены символов - я бы использовал обычный цикл - вряд ли Pos тут будет особо эффективно - тебе все равно надо проверять всю строку. И кстати два замечания:
1. - я бы разделил получение и обработку строк.
2. - в задаче вполне достаточно использовать массив символов фиксированного размера - использование AnsiString здесь затратно и не эффективно.
Хотелось бы узнать как использовать массив фиксированного размера? Как я понял вы говорите о char, и как в нем производить поиск?
Может кто линк на нужную литературу даст по обработке символов, поиску в тексте и тд?
А в использовании массива фиксированной длины особой хитрости нет. Кури RFC 2812 в котором сказано, что размер строки сообщения и параметров не может превышать 512 символов. Нет смысла в динамическом выделении строк.
Вариантов как производить поиск - как минимум 3. Тем более тебе ведь не просто надо искать - тебе надо выделить команды, сообщение и параметры. Опять же - кури рфс.
Код:
Data.LastDelimiter(":***")