HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- С++ Парсер строки (https://hlfx.ru/forum/showthread.php?threadid=1462)
Отправлено Scrama 31-07-2008 в 10:28:
С++ Парсер строки
Что-то я запарился с этой штукой. Короче, нужна функция вот с таким прототипом:
C++ Source Code:
int ParseString(wchar_t * wcIn, wchar_t ** wcOut); |
Т.е. подаем ей строчку в юникоде (а ля "словораз; словодва; словотри"), получаем массив юникодовых строчек и возвращаем количество строк. Писал так:C++ Source Code:
1 | int ParseString(CComBSTR Input, CComBSTR **Output) |
9 | while (' ' == Input[i]) i++; |
10 | while ((';' != Input[i])&&(i <= l)){ |
16 | *Output = new CComBSTR[lC+1]; |
17 | for(long k=0; k<lC; k++) *Output[k] = buf[k]; |
20 | *Output = new CComBSTR[1]; |
Не работает.
Добавлено 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) |
3 | const wchar_t *d = L";"; |
8 | v = wcstok_s(Input, d, &nt); |
12 | pTmp = new CComBSTR[lC+1]; |
13 | for (int i=0; i<lC; i++) pTmp[i] = pBuf[i]; |
16 | pTmp = new CComBSTR[1]; |
19 | v = wcstok_s(NULL, d, &nt); |
Добавлено 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
Отправлено Дядя Миша 31-07-2008 в 14:48:
Scrama а чем старый-добрый Com_ParseToken тебя не устроил?
Я на его основе написал целую parselib, правда на чистом с
но может кому пригодится.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Scrama 01-08-2008 в 01:53:
Видимо, я о нем не знал. Я ж дельфиец, а на цэпэпэ пишу только в минуты отчаяния 
__________________
"Злобным гениям не нужна харизма." © 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
Отправлено Scrama 01-08-2008 в 06:08:
Тут же, ибо снова 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
Отправлено Дядя Миша 01-09-2008 в 09:05:
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'
Отправлено Scrama 01-09-2008 в 09:40:
Я уж и забыл про этот тред! Я тогда при формировании списка последним элементом какой-то значок добавлял и обрабатывал потом до его первого вхождения, решил в лоб.
__________________
"Злобным гениям не нужна харизма." © 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