crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Парсер CSV файла, исходный код
Гость_Dmitry_rk_*
сообщение 6.6.2012, 20:32
Сообщение #11





Гости








    


Оба парсера из этой не соответствуют спецификации и не могут распарсить 100% валидный CSV
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 20.9.2012, 13:54
Сообщение #12


Профессионал
*****

Группа: Участник
Сообщений: 2013
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 67 раз(а)




Репутация:   18  


Цитата(Dmitry_rk @ 6.6.2012, 21:32) *
Оба парсера из этой не соответствуют спецификации и не могут распарсить 100% валидный CSV

Еще раз спрошу... дело в распарсивании комментариев // и /* */? Так это специально было сделано. Сразу же об этом и оговорился в первом же посте. В чем еще ошибки?

Сообщение отредактировал AD - 20.9.2012, 13:56
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
D_K
  опции профиля:
сообщение 20.10.2012, 15:56
Сообщение #13


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 20.5.2009
Пользователь №: 761

Спасибо сказали: 3 раз(а)




Репутация:   1  


AD, ошибка в том, что представленные тут парсеры парсят не csv-файлы, а некоторый свой формат, похожий на csv :)
На csv же есть спецификация.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 29.10.2012, 12:00
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 2013
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 67 раз(а)




Репутация:   18  


Цитата(D_K @ 20.10.2012, 16:56) *
AD, ошибка в том, что представленные тут парсеры парсят не csv-файлы, а некоторый свой формат, похожий на csv :)
На csv же есть спецификация.

Так убрать эти комментарии и он все выполняет! ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_Phoenix_*_*
сообщение 5.1.2017, 18:08
Сообщение #15





Гости








    


Моя реализация парсера строки CSV:
Раскрывающийся текст
QStringList parseCSV(QString str){

    QStringList ret;

    str = str.simplified();

    int count = str.count();

    for (int i = 0; i<count; ++i)
    {
        bool bRemove = false;
        int pStart = i;
        int pStop = -1;

        if (str.at(i) == QChar('"'))
        {
            pStart+=1;
            bRemove = true;
            bool b = false;
            for (i=i+1; i<count; ++i)
            {
                if ( str.at(i) == QChar('"')) b=!b;
                else
                    if (b)
                        if (str.at(i) == QChar(','))
                        {
                            pStop = i-1;
                            break;
                        }
            }
        }
        else
        {
            for (; i<count; ++i)
                if ( str.at(i) == QChar(',')) {
                    pStop = i;
                    break;
                }

        }

        if (pStop == -1) pStop = count;

        QString fString = str.mid(pStart, pStop - pStart);

        if (bRemove) fString = fString.remove("\"\"");

        ret.append( fString );
    }

    return ret;
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_Phoenix_*_*
сообщение 5.1.2017, 18:18
Сообщение #16





Гости








    


Кое-что поправил:
Раскрывающийся текст
QStringList parseCSV(QString str){

    QStringList ret;

    str = str.simplified();

    int count = str.count();

    for (int i = 0; i<count; ++i)
    {
        bool bReplace = false;
        int pStart = i;
        int pStop = -1;

        if (str.at(i) == QChar('"'))
        {
            pStart += 1;
            bReplace = true;
            bool b = false;
            for (i=i+1; i<count; ++i)
            {
                if ( str.at(i) == QChar('"')) b=!b;
                else
                    if (b)
                        if (str.at(i) == QChar(','))
                        {
                            pStop = i-1;
                            break;
                        }
            }
        }
        else
        {
            for (; i<count; ++i)
                if ( str.at(i) == QChar(',')) {
                    pStop = i;
                    break;
                }

        }

        if (pStop == -1) pStop = count;

        QString fString = str.mid(pStart, pStop - pStart);

        if (bReplace) fString = fString.replace("\"\"", "\"");

        ret.append( fString );
    }

    return ret;
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_Phoenix_*_*
сообщение 6.1.2017, 15:39
Сообщение #17





Гости








    


Еще кое-что поправил:

Раскрывающийся текст
QStringList parseCSV(QString str){

    QStringList ret;

    str = str.simplified();

    int count = str.count();

    for (int i = 0; i<count; ++i)
    {
        bool bReplace = false;
        int pStart = i;
        int pStop = -1;

        if (str.at(i) == QChar('"'))
        {
            pStart += 1;
            bReplace = true;
            bool b = false;
            for (i=i+1; i<count; ++i)
            {
                if ( str.at(i) == QChar('"')) b=!b;
                else
                    if (b)
                        if (str.at(i) == QChar(','))
                        {
                            pStop = i-1;
                            break;
                        }
            }
        }
        else
        {
            for (; i<count; ++i)
                if ( str.at(i) == QChar(',')) {
                    pStop = i;
                    break;
                }

        }

        if (pStop == -1) pStop = bReplace ? count-1 : count;

        QString fString = str.mid(pStart, pStop - pStart);

        if (bReplace) fString = fString.replace("\"\"", "\"");

        ret.append( fString );
    }

    return ret;
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.1.2017, 8:51