|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Помогите разобрать файл
Добрый вечер, есть файл с остатками товара выгруженный из 1С в формате HTML
Мне нужно из него получить такие вещи как: 1. Категория товара 2. Название товара 3. Артикул товара (он пишется в конце названия товара) 4. Остаток на складе 5. Цена товара Все сделал, получаю и артикул и цену и название товара и остатки. Все вроде бы просто, Но не могу сообразить, как сделать так что бы рядом с каждым товаром ( с названием товара ) писалась категория, до тех пор, пока парсится товар из данной категории. Закончилась одна категория товаров, перешли к следующей.... Примерно вот так Категория упоминается только один раз, перед началом списка товаров Вот только в этом весь ступор )) Оригинальный файл с таблицей остатков прикрепил |
#2
|
|||
|
|||
Категория идет отдельным тегом (группой тегов). Как я понял, саму группу тегов ты распознаешь. Тогда алгоритм примерно такой.
Перед циклом обнуляешь переменную, в которой у тебя будет названии категории. Внутри цикла если нашел категорию, то запоминаешь ее. если это товар, то берешь категорию из переменной. Типа такого (код условный): Код:
var CatName : String; DataRow : TDataRowObject; // типа результат получения строки begin CatName := ''; Repeat DataRow := ParseHTML(...); // получаем очередную строку из хтмл'я If DataRow.IsCategory Then CatName := DataRow.Name // сохраняем имя категории Else AddRow(CatName, DataRow.Name, DataRow.Art, DataRow.Proce, DataRow.Quantity); // иначе - добавляем строку Until DataRow = Nil; |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
ApxaHGe1 (17.10.2016)
|
#3
|
||||
|
||||
Категорию, название, артикул (считываю с конца строки до первого пробела) и цену удалось распарсить, где остаток на складе искать?
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#4
|
|||
|
|||
Цитата:
Мне удалось все распарсить но не могу заставить что бы писал рядом категорию товара... т.е. что бы на выходе получилось нечто |
#5
|
||||
|
||||
Вот пример для D7, но немного глючит - лишние теги пролезают
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
ApxaHGe1 (14.10.2016)
|
#6
|
|||
|
|||
Спасибо, буду разбираться и заберу часть кода себе
Все прекрасно работает, только 1 ньюанс, он берет цену, общего количества... т.е. 5 штук товара например) а надо одного товара) Но это я уже исправил Последний раз редактировалось ApxaHGe1, 14.10.2016 в 17:21. |
#7
|
||||
|
||||
Тогда нужно заменить блок цикла на
Код:
... for b:= Length(d) downto 1 do if d[b] = ' ' then begin lit.SubItems.Add(Copy(d, 1, b-1)); lit.SubItems.Add(Copy(d, b+1, Length(d))); lit.SubItems.Add(Copy(txtAll[i+2],46,Length(txtAll[i]))); lit.SubItems.Add(Copy(txtAll[i+3],30,Length(txtAll[i]))); break; end; ... З.Ы. Ой, про "это я уже исправил" не заметил :-) Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
ApxaHGe1 (17.10.2016)
|