LINUX.ORG.RU

[C++][std::string][parse] делители для std::istringstream

 ,


0

1

Всем привет.

есть файл строк аля:

dsad,fdfd,123213,«okokok»,oooeeee,9292,«parse, this, hahaha»,LOL,fdf

суть: распарсить строчку

делаю как то так:

std::istringstream iss ( str );
getline ( iss, buff, ',' )
но соответственно 'ломается' «parse, this, hahaha», которая должна считаться как целостная, есть какие-нить изящные хорошие решение кроме find\substr ?

Спасибо.

★★★

что ты его просил, то он и сделал можешь попробовать сначала выцепить из строки все «закавыченное», а то что осталось разбивать по запятым

marvin_yorke ★★★
()

мне кажется, тут проще навелосипедить и пройтись по целой строке итераторами.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от schizoid

о! гугля на csv наткнулся на boost spirit, вроде как это то что надо, осталось только осилить)

fura13 ★★★
() автор топика

Изящные решения зависят от твоего синтаксиса. Только ли допустимы «а,б,в», но может быть предусмотрено «а,\„б,в“, «а,„б,в», «а,\„б,в», „а,\„б,в“, “а,„б,в”, ‘а,„б,в’ и т.д.
getline ( iss, buff, ',' ) в принципе не может знать особенности всего того, что только смогут напридумывать во входных данных.

anonymous
()

Что-то типа того:

#include <stdio.h>
#include <string.h>

char * str = "dsad,fdfd,123213,\"okokok\",oooeeee,9292,\"parse, this, hahaha\",LOL,fdf";

int main() {
        int len = strlen(str);
        int i, buffpos = 0;;
        int quoted = 0;
        char buff[1024] = {0};
        char separator = ',';
        char quote = '\"';

        for(i=0; i<len; i++) {
                if (str[i] == quote)
                        quoted = quoted?0:1;
                if (str[i] == separator && strlen(buff) > 0 && !quoted) {
                        // Write buff to stdout
                        printf("Item: %s\n", buff);
                        bzero(buff, 1024);
                        buffpos = 0;
                } else {
                        // Put character to buff
                        buff[buffpos] = str[i];
                        buffpos++;
                }
        }

        return 0;
}

Jetty ★★★★★
()
Ответ на: комментарий от Jetty

Ну да, и в конце проверить буфер нада, на предмет наличия в нем чегото

Jetty ★★★★★
()

есть файл строк аля:

dsad,fdfd,123213,«okokok»,oooeeee,9292,«parse, this, hahaha»,LOL,fdf

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

shty ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.