Парсинг строки
От: satarus  
Дата: 25.02.08 10:16
Оценка:
Привет всем. Есть строка "<tag1>значение</tag1>" Как мне вытянуть "значение" из строки? Приложение пешеться на Winapi и использовать другие библиотеки я не могу. Есть в С ф-и для парсинга? Заранее все благодарен.

27.02.08 15:24: Перенесено модератором из 'C/C++' — Кодт
Re: Парсинг строки
От: Аноним  
Дата: 25.02.08 13:37
Оценка:
Здравствуйте, satarus, Вы писали:

S>Привет всем. Есть строка "<tag1>значение</tag1>" Как мне вытянуть "значение" из строки? Приложение пешеться на Winapi и использовать другие библиотеки я не могу. Есть в С ф-и для парсинга? Заранее все благодарен.



i = 0;
while( str[i] != '>' ) i++;
j=0;
while ( ( buf[j] = str[i] ) != '<' ) { i++; j++; }
buf[j] =0;


либо, если в тэге могут быть аттрибутыто можно делать парсинг с конца
Re[2]: Парсинг строки
От: __kain Россия  
Дата: 25.02.08 13:58
Оценка:
Здравствуйте, Аноним, Вы писали:

А>либо, если в тэге могут быть аттрибутыто можно делать парсинг с конца

+ если это HTML — нужно помнить о комментариях.
Re[2]: Парсинг строки
От: Аноним  
Дата: 25.02.08 14:34
Оценка:
перед j = 0, надо еще i++ вставить
Re: Парсинг строки
От: BishopMorton Россия  
Дата: 25.02.08 19:21
Оценка: +1
Здравствуйте, satarus, Вы писали:

S>Привет всем. Есть строка "<tag1>значение</tag1>" Как мне вытянуть "значение" из строки? Приложение пешеться на Winapi и использовать другие библиотеки я не могу. Есть в С ф-и для парсинга? Заранее все благодарен.


А почему ATL CAtlRegExp класс не используете?
Это что же template'ная библиотека, фактически в сорцах... никаких зависимостей от других dll и тп

со строчкой типа: <tag1>(.*?)</tag1>

WBR,
Anton
When money talks... nobody checks the grammar.
Re: Парсинг строки
От: Кодт Россия  
Дата: 27.02.08 13:00
Оценка: +1
Здравствуйте, satarus, Вы писали:

S>Привет всем. Есть строка "<tag1>значение</tag1>" Как мне вытянуть "значение" из строки? Приложение пешеться на Winapi и использовать другие библиотеки я не могу. Есть в С ф-и для парсинга? Заранее все благодарен.


Если у тебя язык разметки — честный HTML или XML, то дёшево ты не отделаешься.
Там могут быть
— пробельные символы в ассортименте
— комментарии
— вложенные тэги, не дай бог
Придётся взять парсер, а в случае HTML ещё и валидатор может понадобиться...

Если же ты уверен в строгости формата строки — то либо любой регексп, либо захардкодить ручками.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re: Парсинг строки
От: nik0lay Россия  
Дата: 27.02.08 13:12
Оценка:
Здравствуйте, satarus, Вы писали:

S>Привет всем. Есть строка "<tag1>значение</tag1>" Как мне вытянуть "значение" из строки? Приложение пешеться на Winapi и использовать другие библиотеки я не могу. Есть в С ф-и для парсинга? Заранее все благодарен.



strchr    Ищет первое  появление  литеры  ch  в строке string.
strcmp    Посимвольно  сравнивает  две строки 
strcmpl   Сравнивает две строки,  трактуя  литеры нижнего и верхнего регистра как одинаковые.
strcpy    Копирует строку  string2 в string1,  включая завершающую литеру '\0'. Возвращает string1.
strcspn   Исследует строку string1 на первое появление литеры из строки string2.



гугля рулит
Все имена функций и классов изменены, любое совпадение является случайным.
Re[2]: Парсинг строки
От: Аноним  
Дата: 28.02.08 07:29
Оценка:
Здравствуйте, nik0lay, Вы писали:

N>Здравствуйте, satarus, Вы писали:


S>>Привет всем. Есть строка "<tag1>значение</tag1>" Как мне вытянуть "значение" из строки? Приложение пешеться на Winapi и использовать другие библиотеки я не могу. Есть в С ф-и для парсинга? Заранее все благодарен.



N>
N>strchr    Ищет первое  появление  литеры  ch  в строке string.
N>strcmp    Посимвольно  сравнивает  две строки 
N>strcmpl   Сравнивает две строки,  трактуя  литеры нижнего и верхнего регистра как одинаковые.
N>strcpy    Копирует строку  string2 в string1,  включая завершающую литеру '\0'. Возвращает string1.
N>strcspn   Исследует строку string1 на первое появление литеры из строки string2. 
N>



N>гугля рулит


use msdn
Re: Парсинг строки
От: игппук Беларусь  
Дата: 28.02.08 09:49
Оценка: 1 (1)
используйте функцию sscanf. правильно подобранное регулярное выражение решит вашу задачу.
проклятый антисутенерский закон
Re[2]: Парсинг строки
От: _gc Россия  
Дата: 07.03.08 09:16
Оценка:
Здравствуйте, игппук, Вы писали:

И>используйте функцию sscanf. правильно подобранное регулярное выражение решит вашу задачу.

А можно вот тут поподробнее? sscanf поддерживает регэкспы, вы не ошиблись? а если вы говорили не про регэкспы, то приведите пример, как распарсить сабж sscanf'ом?
... << RSDN@Home 1.2.0 alpha rev. 790>>
Re: Парсинг строки?
От: ol-lv СССР https://youtu.be/DQDoYs6wHoo
Дата: 07.03.08 11:24
Оценка:
Здравствуйте, satarus, Вы писали:

S>Привет всем. Есть строка "<tag1>значение</tag1>" Как мне вытянуть "значение" из строки? Приложение пешеться на Winapi и использовать другие библиотеки я не могу. Есть в С ф-и для парсинга? Заранее все благодарен.

На чистом С ? Или С++, если второе, то где-то на codeproject.com валялся парсер html-я.
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Re[2]: Парсинг строки?
От: ol-lv СССР https://youtu.be/DQDoYs6wHoo
Дата: 07.03.08 14:01
Оценка:
Здравствуйте, ol-lv, Вы писали:

OL>Здравствуйте, satarus, Вы писали:


S>>Привет всем. Есть строка "<tag1>значение</tag1>" Как мне вытянуть "значение" из строки? Приложение пешеться на Winapi и использовать другие библиотеки я не могу. Есть в С ф-и для парсинга? Заранее все благодарен.

OL> На чистом С ? Или С++, если второе, то где-то на codeproject.com валялся парсер html-я.

вот там свой парсер есть, на сколько я помню
http://www.codeproject.com/KB/recipes/krhtmlviewer.aspx

а тут ридер html
http://www.codeproject.com/KB/library/GomzyHTMLReader.aspx
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Re[3]: Парсинг строки
От: игппук Беларусь  
Дата: 07.03.08 14:34
Оценка: 61 (3) -1
Здравствуйте, _gc, Вы писали:

_gc>А можно вот тут поподробнее? sscanf поддерживает регэкспы, вы не ошиблись? а если вы говорили не про регэкспы, то приведите пример, как распарсить сабж sscanf'ом?


непосредственно для вышеуказанной задачи вполне подойдет следующее регулярное выражение


char* text = "<tab1>value</tab1>";
char buffer[256] = {0};
sscanf(text, "<tab1>%[^<]", buffer); //в buffer получаем value
проклятый антисутенерский закон
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.