HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > С++ Парсер строки
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Scrama
СССР с интернетом и олигархами!

Дата регистрации: May 2006
Проживает: Прииртышье
Сообщений: 3737

Рейтинг



Награды
 
[1 награда]


Unhappy С++ Парсер строки

Что-то я запарился с этой штукой. Короче, нужна функция вот с таким прототипом:

C++ Source Code:
int ParseString(wchar_t * wcIn, wchar_t ** wcOut);
Т.е. подаем ей строчку в юникоде (а ля "словораз; словодва; словотри"), получаем массив юникодовых строчек и возвращаем количество строк. Писал так:
C++ Source Code:
1
int ParseString(CComBSTR Input, CComBSTR **Output)
2
{
3
  long l = sizeof Input;
4
  long i = 0, lC = 0;
5
  CComBSTR *buf;
6
 
7
  while (i <= l){
8
    CComBSTR tmp(L"");
9
    while (' ' == Input[i]) i++;
10
    while ((';' != Input[i])&&(i <= l)){
11
      tmp +=Input[i];
12
      i++;
13
    }
14
    if (lC){
15
      buf = *Output;
16
      *Output = new CComBSTR[lC+1];
17
      for(long k=0; k<lC; k++) *Output[k] = buf[k];
18
    }
19
    else{
20
      *Output = new CComBSTR[1];
21
    }
22
    *Output[lC] = tmp;
23
    lC++;
24
  }
25
  return lC;
26
}
Не работает.

Добавлено 31-07-2008 в 16:11:

ага, часть косяка нашел - long l = Input.Length();
раз уж все равно CComBSTR использую.

Добавлено 31-07-2008 в 17:15:

Делаю через wcstok, получиться - расскажу

Добавлено 31-07-2008 в 17:26:

C++ Source Code:
1
int ParseAlias(CComBSTR Input, CComBSTR **Output)
2
{
3
  const wchar_t	*d = L";";
4
  wchar_t *v, *nt;
5
  int lC = 0;
6
  CComBSTR *pBuf, *pTmp;
7
 
8
  v = wcstok_s(Input, d, &nt);
9
  while (v){
10
    if (lC){
11
      pBuf = pTmp;
12
      pTmp = new CComBSTR[lC+1];
13
      for (int i=0; i<lC; i++) pTmp[i] = pBuf[i];
14
    }
15
    else
16
      pTmp = new CComBSTR[1];
17
    pTmp[lC] = v;
18
    lC++;
19
    v = wcstok_s(NULL, d, &nt);
20
  }
21
  *Output = pTmp;
22
  return lC;
23
}


Добавлено 31-07-2008 в 17:28:

И почему себе в репу +10 поставить?
Пусть висит, ведь на самом деле фиг найдешь по гуглю, как правильно это делать, иначе я бы столько времени не потратил.

__________________
"Злобным гениям не нужна харизма." © Shooter__Andy
"Making stuff for an "old ugly game" can be ten times more fun than grinding on a map for a dull, next-gen title." © Lunaran

Сообщить модератору | | IP: Записан
Сообщение: 35708

Старое сообщение 31-07-2008 10:28
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Scrama а чем старый-добрый Com_ParseToken тебя не устроил?
Я на его основе написал целую parselib, правда на чистом с
но может кому пригодится.

Вложение: parselib.zip (3.7 кб)
Этот файл был скачан 285 раз.
Дядя Миша проверил это вложение на вирусы 31-07-2008 в 14:49

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 35714

Старое сообщение 31-07-2008 14:48
-
Scrama
СССР с интернетом и олигархами!

Дата регистрации: May 2006
Проживает: Прииртышье
Сообщений: 3737

Рейтинг



Награды
 
[1 награда]


Видимо, я о нем не знал. Я ж дельфиец, а на цэпэпэ пишу только в минуты отчаяния

__________________
"Злобным гениям не нужна харизма." © Shooter__Andy
"Making stuff for an "old ugly game" can be ten times more fun than grinding on a map for a dull, next-gen title." © Lunaran

Сообщить модератору | | IP: Записан
Сообщение: 35718

Старое сообщение 01-08-2008 01:53
- За что?
Scrama
СССР с интернетом и олигархами!

Дата регистрации: May 2006
Проживает: Прииртышье
Сообщений: 3737

Рейтинг



Награды
 
[1 награда]


Тут же, ибо снова CComBSTR *

Короче, передаю в функцию этот самый набор строк. Как его лучше передать - как CComBSTR *pAlias или как CComBSTR pAlias[]?
Конкретно, мне нужно узнать количество строк, чтоб не таскать их из функции в цункцию от момента заполнения. sizeof всегда выдает мне 4, видимо, это размер указателя в байтах.

__________________
"Злобным гениям не нужна харизма." © Shooter__Andy
"Making stuff for an "old ugly game" can be ten times more fun than grinding on a map for a dull, next-gen title." © Lunaran

Сообщить модератору | | IP: Записан
Сообщение: 35721

Старое сообщение 01-08-2008 06:08
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Scrama длину строки strlen, а кол-во строк можно считать вручную по факту обнаружения '\n'
Хотя я полагаю, что CComBSTR это и сам умеет.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 36460

Старое сообщение 01-09-2008 09:05
-
Scrama
СССР с интернетом и олигархами!

Дата регистрации: May 2006
Проживает: Прииртышье
Сообщений: 3737

Рейтинг



Награды
 
[1 награда]


Я уж и забыл про этот тред! Я тогда при формировании списка последним элементом какой-то значок добавлял и обрабатывал потом до его первого вхождения, решил в лоб.

__________________
"Злобным гениям не нужна харизма." © Shooter__Andy
"Making stuff for an "old ugly game" can be ten times more fun than grinding on a map for a dull, next-gen title." © Lunaran

Сообщить модератору | | IP: Записан
Сообщение: 36465

Старое сообщение 01-09-2008 09:40
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 08:22. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > С++ Парсер строки
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024