Название: Работа с файлами Отправлено: 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 строк, так что работать ручками не хочется! ;D Название: Re: Работа с файлами Отправлено: BRE от Октябрь 17, 2009, 19:42 Поля точно пробелами разделены? может все таки табуляцией?
Можно попробовать регулярными выражениями, в качестве разделителя между полями использовать 2 и более пробелов. Название: Re: Работа с файлами Отправлено: kadr от Октябрь 17, 2009, 19:45 Точно пробелами, с регулярными выражениями у меня пока туговато! Может как нибуть по проще это можно сделать? ???
Название: Re: Работа с файлами Отправлено: lit-uriy от Октябрь 17, 2009, 20:03 можно посимвольно читать, больше двух пробелов подряд - разделять
Название: Re: Работа с файлами Отправлено: Joss от Октябрь 17, 2009, 20:06 1,4,5,6 колонки - начинаются с цифры
7 - со скобки 2 колонка - заканчивается цифрой Я бы парсил через IndexOf() Название: Re: Работа с файлами Отправлено: lit-uriy от Октябрь 17, 2009, 20:06 сейчас скопировал пример в текстовый редактор и увидел:
7 столбцов с фиксированными позициями: 0, 11, 54, 97, 107, 119, 132 Название: Re: Работа с файлами Отправлено: kadr от Октябрь 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-ом, но он мне и в названиях товара, где есть пробел, соответсвенно наставил этих знаков! Название: Re: Работа с файлами Отправлено: kadr от Октябрь 17, 2009, 20:16 1,4,5,6 колонки - начинаются с цифры А по подробнее можно про это! как это можно осуществить, indexOf() возвращает индекс символа или подстроки если они найдены! Как мне это поможет! 7 - со скобки 2 колонка - заканчивается цифрой Я бы парсил через IndexOf() Да во второй колонке не все названия заканчиваются цифрой, а 7 начинается не только со скобки! Название: Re: Работа с файлами Отправлено: Joss от Октябрь 17, 2009, 20:31 А в Excel не засунуть это?
В некоторых редакторах есть выделение столбцов, в том же MSVC - не поможет? Вообще вопрос надо перенести, это не Qt, это алгоритмы. А автор выдает неполную информацию, поэтому помочь невозможно. Полноценный пример в студию... Название: Re: Работа с файлами Отправлено: kadr от Октябрь 17, 2009, 20:37 Дело в том что я в QT совсем недавно, поэтому много не знаю! Разве QT работает с exele? Какой информации не хватает? Я же говорю, что надо из файла текстового выдернуть определнные данные, вот и интересуюсь, как это можно сделать, просто сам никак не пойму как сделать!
Название: Re: Работа с файлами Отправлено: Joss от Октябрь 17, 2009, 20:49 1. Тема не для этой ветки, это не Qt.
2. Excel... там есть VusialBasic, можно легко обработать формы, сконвертировать так, как нужно. 3. Информации не хватает - файла самого. Вы же приводите пример, к которому дают конкретные алгоритмы, оказывается есть множество исключений и эти алгоритмы не подходят. Совет - если нет возможности алгоритмизировать, ищите обходные пути. Может файл вообще в Excel можно получить, может вручную отформатировать. Название: Re: Работа с файлами Отправлено: BRE от Октябрь 17, 2009, 21:21 Да все просто:
Код
Вывод: ("8203", "Цикло-Прогинова драже х 21", "Schering GmbH und Co. Produktions KG", "6", "490,97р.", "490,97р.", "( ВCE ГРУППЫ )") Название: Re: Работа с файлами Отправлено: kadr от Октябрь 18, 2009, 15:59 Да все просто: Код
Вывод: ("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 ГРУППЫ ) и там к сожалению после кода всего один пробел, и выражение уже не срабатывает, буду думать что с этим можно сделать! :) Название: Re: Работа с файлами Отправлено: lit-uriy от Октябрь 18, 2009, 16:45 >>буду думать что с этим можно сделать!
Я тебе написал вариант и он соответствует последнему примеру. Название: Re: Работа с файлами Отправлено: Igors от Октябрь 19, 2009, 09:39 и там к сожалению после кода всего один пробел, и выражение уже не срабатывает, буду думать что с этим можно сделать! :) Никто не сможет придумать 100% корректное решение для некорректных/неопределенных данных (как в данном случае). Разбирайте как предложено выше и ловите ошибки (например, или поле не переводится в число или получается слишком много полей и.т.п.). Ошибочную строку исправляете в текстовом редакторе и повторяете процедуру. Не очень креативно но задачу решает :)Название: Re: Работа с файлами Отправлено: Rcus от Октябрь 19, 2009, 09:57 Все корректно. Это fixed-column формат данных. (Чтобы догадаться достаточно включить моноширинный шрифт)
|