![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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)
| ||