Парсинг прайса.

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
Делаю парсинг прайса. У каждого товара есть графа "наличие" и три варианты (есть на складе, "доставка на следующий день" - в прайсе это отображается так:
сегодня допустим 04.03. В прайсе стоит 05.03
и еще есть товар который доставляется через 5 дней. допустим сегодня 04.03, доступен будет 09.03.
Мне необходимо парсить только тот что "есть в наличии" и который будет на сл. день. В наличии получается спарсить а тот что будет завтра как указать?
Как я понимаю будет через переменную сегодняшнее число добавляем к нему +1 и сверяем? правильно мыслю?
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
вообще да, но возможно в прайсе есть еще какие то признаки
 

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
вот такие строки
06.03, 15:00
и
10.03, 15:00

как составить переменную чтоб бралось сегодняшнее число 05.03 к нему добавлялся день и получалось 06.03
если в прайсе стоит 06.03, 15:00 - мы берем строку, а если 10.03, 15:00 - строка не берется.
спасибо.
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
делаете список - в него парсите таблицу построчно со всеми тегами и кашей
Потом каждый элемент списка обрабатываете по следующему алгоритму:
Берем сегодняшнюю дату
берем дату из строки
разбиваем сегодняшнюю дату регуляркой +1 день к дате
Проверка на валидность новой даты
разбиваем регуляркой дату из строки
сравниваем
Если ОК - пилим таблицу дальше
Если не ОК - переходим к следующей строке
 

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 591
Благодарностей
1 014
Баллы
113
сорь за оффтоп, ТС если магаз на ОС то могу прикрутить за недорого импорт вашего прайса, что бы так не е....цо :-)
 

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
спасибо, уже практически доделал прайс. помогите только вытянуть из этой таблицы

HTML:
<table class="table table-bordered" cellpadding="4" cellspacing="2">
                <tbody>
                       
                                            <tr class="bg1">
                            <td class="param">Производитель</td>
                            <td class="descr">SAMSUNG</td>
                        </tr>
                        
                                            <tr class="bg2">
                            <td class="param">Модель</td>
                            <td class="descr">UE-32EH4000</td>
                        </tr>
                        
                                            <tr class="bg1">
                            <td class="param">Артикул</td>
                            <td class="descr">UE32EH4000WXUA</td>
                        </tr>
                        
                                            <tr class="bg2">
                            <td class="param">Тип телевизора</td>
                            <td class="descr">С LED-подсветкой, Средние</td>
                        </tr>
                        
                                            <tr class="bg1">
                            <td class="param">Диагональ экрана</td>
                            <td class="descr">32" Wide (80 см)</td>
                        </tr>
                        
                                            <tr class="bg2">
                            <td class="param">Разрешение экрана</td>
                            <td class="descr">1366x768</td>
                        </tr>
                        
                                            <tr class="bg1">
                            <td class="param">Тип экрана</td>
                            <td class="descr">ЖК (LCD) с LED-подсветкой</td>
                        </tr>
                        
                                            <tr class="bg2">
                            <td class="param">Частота смены кадров</td>
                            <td class="descr">50Гц</td>
                        </tr>
                        
                                            <tr class="bg1">
                            <td class="param">Углы обзора</td>
                            <td class="descr">178/178</td>
                        </tr>
                        
                                            <tr class="bg2">
                            <td class="param">Тип тюнера</td>
                            <td class="descr">цифровой</td>
                        </tr>
                        
                                            <tr class="bg1">
                            <td class="param">Диапазон цифрового тюнера</td>
                            <td class="descr">DVB-С, DVB-T</td>
                        </tr>
                        
                                            <tr class="bg2">
                            <td class="param">Акустика</td>
                            <td class="descr">2х10 Вт SRS Trusurround HD, Dolby Digital Plus</td>
                        </tr>
                        
                                            <tr class="bg1">
                            <td class="param">Интерфейсы</td>
                            <td class="descr">1HDMI, Composite In (AV), Scart, Component In (Y/Pb/Pr)</td>
                        </tr>
                        
                                            <tr class="bg2">
                            <td class="param">Дополнительные функции</td>
                            <td class="descr">USB - JPEG/MP3/DivX, CI-слот</td>
                        </tr>
                        
                                            <tr class="bg1">
                            <td class="param">Подстветка</td>
                            <td class="descr">Full LED</td>
                        </tr>
                        
                                            <tr class="bg2">
                            <td class="param">Цвет панели</td>
                            <td class="descr">черный</td>
                        </tr>
                        
                                            <tr class="bg1">
                            <td class="param">Комплектность</td>
                            <td class="descr">шнуры питания (европейские [Schuko]/UK), пульт ДУ, батареи, краткое руководство</td>
                        </tr>
                        
                                            <tr class="bg2">
                            <td class="param">Соответствие стандартам</td>
                            <td class="descr">CE, CB, WEEE</td>
                        </tr>
                        
                                            <tr class="bg1">
                            <td class="param">Гарантия, мес</td>
                            <td class="descr">12</td>
                        </tr>
                        
                                    </tbody>
            </table>
Чтоб по итогу получить:

Производитель : SAMSUNG
Модель : UE-32EH4000
Артикул : UE32EH4000WXUA
Тип телевизора : С LED-подсветкой, Средние
Диагональ экрана : 32" Wide (80 см)
Разрешение экрана : 1366x768
Тип экрана : ЖК (LCD) с LED-подсветкой
Частота смены кадров : 50Гц
Углы обзора : 178/178
Тип тюнера : цифровой
Диапазон цифрового тюнера : DVB-С, DVB-T
Акустика : 2х10 Вт SRS Trusurround HD, Dolby Digital Plus
Интерфейсы : 1HDMI, Composite In (AV), Scart, Component In (Y/Pb/Pr)
Дополнительные функции: USB - JPEG/MP3/DivX, CI-слот
Подстветка : Full LED
Цвет панели : черный
Комплектность: шнуры питания (европейские [Schuko]/UK), пульт ДУ, батареи, краткое руководство
Соответствие стандартам : CE, CB, WEEE
Гарантия, мес : 12
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 714
Баллы
113
Вот такой регуляркой получать список характеристик. Потом брать каждую и выпаршивать оттуда название параметра и значение)
http://gyazo.com/cfdae8fc4c05f214518c41fc096be501.png
 

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
я вытаскиваю первую колонку с классом "param" и кладу все в список1, и вторую колонку "descr" и кладу ее в список2
как теперь объединить эти 2 списка в один и получить такой

Производитель : SAMSUNG
Модель : UE-32EH4000
Артикул : UE32EH4000WXUA
Тип телевизора : С LED-подсветкой, Средние
Диагональ экрана : 32" Wide (80 см)
Разрешение экрана : 1366x768
Тип экрана : ЖК (LCD) с LED-подсветкой
Частота смены кадров : 50Гц

и после его уже положить в переменную
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
через цикл) Я обычно когда натыкаюсь на такую задачу обычно сначала парсю строки целиком в одни список, а потом в другой уже кладу результаты обработки регулярками каждой строки во второй список.
Вот вам сниппет - чтобы жилось счастливо)
var list = project.Lists["Список 1"];
var list2 = project.Lists["Список 2"];
var list3 = project.Lists["Список 3"]; // в него будем класть результаты

if(list.Count!=list2.Count)
{
System.Windows.MessageBox.Show("Списки разной длинны - все пропало!");
return false;
}
for(int i = 0;i<list.Count;i++)
{
list3.Add(list+":"+list2);
}
return true;
 

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 591
Благодарностей
1 014
Баллы
113
Дык вы еще и с сайта грабите :-)
Тут уж точно проще на чистом php+simplehtmldom
Сразу скажу, что поставщики бывает всякую html херню вставляют куда не надо :(
По этмоу я бы еще заранее позаботился об вычищении возможных тэгов
 

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
через цикл) Я обычно когда натыкаюсь на такую задачу обычно сначала парсю строки целиком в одни список, а потом в другой уже кладу результаты обработки регулярками каждой строки во второй список.
Вот вам сниппет - чтобы жилось счастливо)
var list = project.Lists["Список 1"];
var list2 = project.Lists["Список 2"];
var list3 = project.Lists["Список 3"]; // в него будем класть результаты

if(list.Count!=list2.Count)
{
System.Windows.MessageBox.Show("Списки разной длинны - все пропало!");
return false;
}
for(int i = 0;i<list.Count;i++)
{
list3.Add(list+":"+list2);
}
return true;
спасибо за сниппет, но выдает ошибку на этой строке
System.Windows.MessageBox.Show("Списки разной длинны - все пропало!");
и слетает шаблон
 

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
Дык вы еще и с сайта грабите :-)
Тут уж точно проще на чистом php+simplehtmldom
Сразу скажу, что поставщики бывает всякую html херню вставляют куда не надо :(
По этмоу я бы еще заранее позаботился об вычищении возможных тэгов
Все чищу регулярками, проблем вроде как нет. Уже пару шаблонов написал по парсингу, так что потихоньку набираюсь опыта.
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
А что за ошибку? или таки вылезает окошко с сообщением? Если вылетает окошко - значит таки списки действительно разной длинны и они не совместятся)))
 

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
Ошибка
Компиляция кода Ошибка в действии "CS0234" The type or namespace name 'MassageBox'does not exist in the namespace @System.Windows' (are you missing an assembly reference?)". [Строка:7; Столбец: 16]
 

bigcajones

Client
Регистрация
09.02.2011
Сообщения
1 216
Благодарностей
683
Баллы
113
Should be System.Windows.Forms.MessageBox
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
О_о а откуда взялся mAssegebox?
 

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
MessageBox, а о чем это говорит???
Когда добавил ваш С++ код он выдает ошибку что я писал и после не одно действие не работает пока не удалить С++
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Если вы целиком скопировали ошибку то в ней все написано
"CS0234" The type or namespace name 'MassageBox'does not exist in the namespace @System.Windows' (are you missing an assembly reference?)". [Строка:7; Столбец: 16]
Не знает зеннопостер такого)) и говорит - что может пропущено какое то пространство имен?

Если вставляли код как есть - то должен какую то другую ошибку выдавать.

пы.Сы. ни одно действие не работает, так как не может скомпилировать некорректный экзешник
 

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
Если вы целиком скопировали ошибку то в ней все написано
"CS0234" The type or namespace name 'MassageBox'does not exist in the namespace @System.Windows' (are you missing an assembly reference?)". [Строка:7; Столбец: 16]
Не знает зеннопостер такого)) и говорит - что может пропущено какое то пространство имен?

Если вставляли код как есть - то должен какую то другую ошибку выдавать.

пы.Сы. ни одно действие не работает, так как не может скомпилировать некорректный экзешник
вставлял код как вы написали и вот такую ошибку получил как выше написана, а у вас данный сниппет работает??

сейчас сделал парсинг текста регулярками, потом ложу в 2 списка - а уже из них делаю третий
но по итогу всеравно получаю ошибку в зенке(хотя в проджетмайкер все нормально делает)
вот кусок шаблона (ниже прикрепил)
И вот ошибка из лога зенки
Index was out of range. Must be non-negative and less than the size of the collection.
ошибка возникает когда берется строка из первого списка, а их там уже нет. Может можно как-то упростить процедуру составления 3 списка и после положить результат в переменную? спасибо
 

Вложения

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
Друзья помогите побороть проблему, может кто-нибудь предоставит рабочий сниппет? или подскажите как правильно организовать объединение списка 1 + список 2 и и результат поместить в переменную.
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
попробовал запустить сниппет)
косяк кроется тут
System.Windows.Forms.MessageBox.Show - я когда писал пропустил Forms
но ошибка все равно не про массажные боксы была)

Вот 100% работает))) я проверил)
Код:
var list = project.Lists["Список 1"];
var list2 = project.Lists["Список 2"];
var list3 = project.Lists["Список 3"]; // в него будем класть результаты

if(list.Count!=list2.Count)
{

System.Windows.Forms.MessageBox.Show("Списки разной длинны - все пропало!");
return false;
}
for(int i = 0;i<list.Count;i++)
{
list3.Add(list+":"+list2);
}
return true;
 

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
только увидел что написал про массаж)))
спасибо сниппет рабочий, но в переменной вы выдает только true - а мне необходим текст из 2 списков
что у меня сейчас не так? спасибо за помощь!!
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 714
Баллы
113
Результат в списке 3 а не в в переменной экшена.
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
сжечь меня на костре)))) нашел еще косяк))))
Код:
list3.Add(list[i]+":"+list2[i]);
- так будет лучше)))
 

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
вопрос в догонку, как теперь из списка 3 взять весь текст и положить в переменную?
не могу этого нигде найти в wiki
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
В операциях над списком есть что то вроде - Объеденить
 

stas11

Client
Регистрация
31.03.2013
Сообщения
188
Благодарностей
5
Баллы
18
Спасибо всем за помощь, получилось.
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)