Russian Qt Forum
Ноябрь 26, 2024, 10:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Работа с файлами  (Прочитано 8657 раз)
kadr
Гость
« : Октябрь 17, 2009, 19:37 »

Всем привет, помогите мне решить такую проблему!
имеется фаил примерно такого содержания:
8203      Цикло-Прогинова драже х 21                 Schering GmbH und Co. Produktions KG       6         490,97р.    490,97р.     ( ВCE ГРУППЫ )
8204      Фемоден драже х 21                         Schering GmbH und Co. Produktions KG       79        434,52р.    434,52р.     ( ВCE ГРУППЫ )
8207      Ультрапрокт супп. ректал. х 10             Intendis Manufacturing - Италия            11        354,12р.    354,12р.     ( ВCE ГРУППЫ )

Нужно выдернуть из него по отдельности- код, нименование, производителя, количество, цену и группу, для дальнейшей загрузки этого всего в MySQL.
Там куча пробелов, например в названии много пробелов, пытался решить проблему split-ом, но названия имеют разное количество пробелов, такая же ерунда и в производителе!
Посоветуйте, что нибудь!  Непонимающий
Да в файле 3500 строк, так что работать ручками не хочется!  Смеющийся
« Последнее редактирование: Октябрь 17, 2009, 19:39 от kadr » Записан
BRE
Гость
« Ответ #1 : Октябрь 17, 2009, 19:42 »

Поля точно пробелами разделены? может все таки табуляцией?
Можно попробовать регулярными выражениями, в качестве разделителя между полями использовать 2 и более пробелов.
Записан
kadr
Гость
« Ответ #2 : Октябрь 17, 2009, 19:45 »

Точно пробелами, с регулярными выражениями у меня пока туговато! Может как нибуть по проще это можно сделать?  Непонимающий
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Октябрь 17, 2009, 20:03 »

можно посимвольно читать, больше двух пробелов подряд - разделять
Записан

Юра.
Joss
Гость
« Ответ #4 : Октябрь 17, 2009, 20:06 »

1,4,5,6 колонки - начинаются с цифры
7 - со скобки
2 колонка - заканчивается цифрой

Я бы парсил через IndexOf()
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Октябрь 17, 2009, 20:06 »

сейчас скопировал пример в текстовый редактор и увидел:
7 столбцов с фиксированными позициями:
0, 11, 54, 97, 107, 119, 132
Записан

Юра.
kadr
Гость
« Ответ #6 : Октябрь 17, 2009, 20:12 »

Я пытался читать посимвольно, но тоже не то, я не могу заставить программу понимать что там больше 2 пробелов!
 while (!file_r.atEnd())
    {
        str = file_r.readLine().trimmed();
        i = 0;
        while (i != str.length())
        {
            if (str.at(i) != ' ')
            {
               str2.append(str.at(i)).trimmed();
            }
            else
            {
                while (str.at(i) ==' ')
                {
                    i++;
                }
                i--;
            }
            i++;
        }
От того что там не будет пробелов вообще мне не лучше, как то надо заделить данные, а без пробелов вообще получиться одна большая строки и что мне с ней делать! Было бы замечательно если бы за место пробелов там где нужно поставить знак какойнибудь, например |, можно было бы тогда воспользоваться split-ом, но он мне и в названиях товара, где есть пробел, соответсвенно наставил этих знаков!
Записан
kadr
Гость
« Ответ #7 : Октябрь 17, 2009, 20:16 »

1,4,5,6 колонки - начинаются с цифры
7 - со скобки
2 колонка - заканчивается цифрой

Я бы парсил через IndexOf()
А по подробнее можно про это! как это можно осуществить,  indexOf() возвращает индекс символа или подстроки если они найдены! Как мне это поможет!
Да во второй колонке не все названия заканчиваются цифрой, а 7 начинается  не только со скобки!
« Последнее редактирование: Октябрь 17, 2009, 20:18 от kadr » Записан
Joss
Гость
« Ответ #8 : Октябрь 17, 2009, 20:31 »

А в Excel не засунуть это?
В некоторых редакторах есть выделение столбцов, в том же MSVC - не поможет?

Вообще вопрос надо перенести, это не Qt, это алгоритмы.
А автор выдает неполную информацию, поэтому помочь невозможно. Полноценный пример в студию...
Записан
kadr
Гость
« Ответ #9 : Октябрь 17, 2009, 20:37 »

Дело в том что я в QT совсем недавно, поэтому много не знаю! Разве QT работает с exele? Какой информации не хватает? Я же говорю, что надо из файла текстового выдернуть определнные данные, вот и интересуюсь, как это можно сделать, просто сам никак не пойму как сделать!
Записан
Joss
Гость
« Ответ #10 : Октябрь 17, 2009, 20:49 »

1. Тема не для этой ветки, это не Qt.
2. Excel... там есть VusialBasic, можно легко обработать формы, сконвертировать так, как нужно.
3. Информации не хватает - файла самого. Вы же приводите пример, к которому дают конкретные алгоритмы, оказывается есть множество исключений и эти алгоритмы не подходят.

Совет - если нет возможности алгоритмизировать, ищите обходные пути. Может файл вообще в Excel можно получить, может вручную отформатировать.
Записан
BRE
Гость
« Ответ #11 : Октябрь 17, 2009, 21:21 »

Да все просто:
Код
C++ (Qt)
       QStringList lst = str.split( QRegExp( "\\s{2,}" ) );
       qDebug() << lst;
 

Вывод:
("8203", "Цикло-Прогинова драже х 21", "Schering GmbH und Co. Produktions KG", "6", "490,97р.", "490,97р.", "( ВCE ГРУППЫ )")
Записан
kadr
Гость
« Ответ #12 : Октябрь 18, 2009, 15:59 »

Да все просто:
Код
C++ (Qt)
       QStringList lst = str.split( QRegExp( "\\s{2,}" ) );
       qDebug() << lst;
 

Вывод:
("8203", "Цикло-Прогинова драже х 21", "Schering GmbH und Co. Produktions KG", "6", "490,97р.", "490,97р.", "( ВCE ГРУППЫ )")

Спасибо, гараздо так проще, но беда как говориться не приходит одна, в файлике также содержаться строки такого содержания:
680000527 Хумулин НПХ картрид.100МЕ/мл 3 мл х 5      Eli Lilly                                  3         1440,76р.   1440,76р.    ( ВCE ГРУППЫ )
и там к сожалению после кода всего один пробел, и выражение уже не срабатывает, буду думать что с этим можно сделать!  Улыбающийся
« Последнее редактирование: Октябрь 18, 2009, 16:01 от kadr » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #13 : Октябрь 18, 2009, 16:45 »

>>буду думать что с этим можно сделать!
Я тебе написал вариант и он соответствует последнему примеру.
Записан

Юра.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Октябрь 19, 2009, 09:39 »

и там к сожалению после кода всего один пробел, и выражение уже не срабатывает, буду думать что с этим можно сделать!  Улыбающийся
Никто не сможет придумать 100% корректное решение для некорректных/неопределенных данных (как в данном случае). Разбирайте как предложено выше и ловите ошибки (например, или поле не переводится в число или получается слишком много полей и.т.п.). Ошибочную строку исправляете в текстовом редакторе и повторяете процедуру. Не очень креативно но задачу решает  Улыбающийся
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.116 секунд. Запросов: 23.