Вопрос по таблицам

Fixer.ru

Client
Регистрация
10.09.2016
Сообщения
64
Благодарностей
13
Баллы
8
Суть: Есть 2 сайта. На них товары х, у, z и тд. Цены на сайтах отличаются, товары имеют абсолютно одинаковые названия. Количество товаров отличается (некоторых может не быть например).

Задача: Собрать в excel все повторяющиеся товары. В столбик А1 записать название товара, в B1 цену первого сайта, в С1 цену второго сайта.

Смастерил парсинг который создаёт 2 таблицы, в одной цены одного сайта, во второй цены другого сайта.

Вопрос, как их удобнее теперь привести к одной таблице?
(очень старался максимально понятно написать)

*Желательно средствами зенки, а не экселя*
 
Последнее редактирование:

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 880
Баллы
113
1. Можно сразу, при парсинге, работать с одной таблицей - первый сайт записывает данные в свои ячейки, второй перед записью проверяет, есть ли данные об этом товаре и если есть - дописывает рядом свои значения, если нет - либо в отдельную таблицу, либо в конец таблицы.
2. Поищите на форуме поиск в таблицах C#. Или же простым перебором - берёте первую строку из первой таблице, пробегаетесь по второй, сравниваете значения и дальше уже по логике раскидываете данные.
 
  • Спасибо
Реакции: Fixer.ru

Fixer.ru

Client
Регистрация
10.09.2016
Сообщения
64
Благодарностей
13
Баллы
8
1. Можно сразу, при парсинге, работать с одной таблицей - первый сайт записывает данные в свои ячейки, второй перед записью проверяет, есть ли данные об этом товаре и если есть - дописывает рядом свои значения, если нет - либо в отдельную таблицу, либо в конец таблицы.
2. Поищите на форуме поиск в таблицах C#. Или же простым перебором - берёте первую строку из первой таблице, пробегаетесь по второй, сравниваете значения и дальше уже по логике раскидываете данные.
Спасибо. Попробую.

Может у кого есть уже готовый код для c# поиска по таблицам?
И ещё небольшой вопрос, который я думаю возникнет. Поиск, я так думаю, будет искать любое совпадение. Как сделать точное вхождение значения ячейки в поиск?
Например в ячейке А1 значение "123 xxxxxx", в ячейке А2 значение "xxxxxx". Если я буду использовать поиск по значению "xxxxxx", то он выдаст обе ячейки. Как сделать, чтобы выдал только вторую при поиске "xxxxxx", и только первую при поиске "123 xxxxxx"?
Есть идея добавлять в начало и конец строки спец символ, а потом убирать его, но это слишком ресурсозатратно. Есть ещё варианты?
 
Последнее редактирование:

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 101
Баллы
113
Смастерил парсинг который создаёт 2 таблицы, в одной цены одного сайта, во второй цены другого сайта.
Если в Таблице2 есть товар из Таблицы1, то в столбец "C" Таблицы2 добавляется значение (цена) из столбца "B" Таблицы1, если же в Таблице2 нет такого товара, то в нее дописывается этот товар из Таблицы1 вместе с ценой.
Надеюсь, понятно написал:D
В общем, результат смотреть в Таблице2.
C#:
IZennoTable table1 = project.Tables["Таблица1"];
IZennoTable table2 = project.Tables["Таблица2"];

lock (SyncObjects.TableSyncer) {
    for (int i = 0; i < table1.RowCount; i++) {
        bool doAction = true;
        for (int j = 0; j < table2.RowCount; j++) {
            if (table1.GetCell(0, i) == table2.GetCell(0, j)) {
                table2.SetCell(2, j, table1.GetCell(1, i));
                doAction = false;
            }
        }
        if (doAction)
            table2.AddRow(table1.GetRow(i));
    }
}
 
  • Спасибо
Реакции: Fixer.ru

Fixer.ru

Client
Регистрация
10.09.2016
Сообщения
64
Благодарностей
13
Баллы
8
Если в Таблице2 есть товар из Таблицы1, то в столбец "C" Таблицы2 добавляется значение (цена) из столбца "B" Таблицы1, если же в Таблице2 нет такого товара, то в нее дописывается этот товар из Таблицы1 вместе с ценой.
Надеюсь, понятно написал:D
В общем, результат смотреть в Таблице2.
C#:
IZennoTable table1 = project.Tables["Таблица1"];
IZennoTable table2 = project.Tables["Таблица2"];

lock (SyncObjects.TableSyncer) {
    for (int i = 0; i < table1.RowCount; i++) {
        bool doAction = true;
        for (int j = 0; j < table2.RowCount; j++) {
            if (table1.GetCell(0, i) == table2.GetCell(0, j)) {
                table2.SetCell(2, j, table1.GetCell(1, i));
                doAction = false;
            }
        }
        if (doAction)
            table2.AddRow(table1.GetRow(i));
    }
}
спасибо, сейчас затестим )
 

Fixer.ru

Client
Регистрация
10.09.2016
Сообщения
64
Благодарностей
13
Баллы
8
Если в Таблице2 есть товар из Таблицы1, то в столбец "C" Таблицы2 добавляется значение (цена) из столбца "B" Таблицы1, если же в Таблице2 нет такого товара, то в нее дописывается этот товар из Таблицы1 вместе с ценой.
Надеюсь, понятно написал:D
В общем, результат смотреть в Таблице2.
C#:
IZennoTable table1 = project.Tables["Таблица1"];
IZennoTable table2 = project.Tables["Таблица2"];

lock (SyncObjects.TableSyncer) {
    for (int i = 0; i < table1.RowCount; i++) {
        bool doAction = true;
        for (int j = 0; j < table2.RowCount; j++) {
            if (table1.GetCell(0, i) == table2.GetCell(0, j)) {
                table2.SetCell(2, j, table1.GetCell(1, i));
                doAction = false;
            }
        }
        if (doAction)
            table2.AddRow(table1.GetRow(i));
    }
}
почему-то не добавляет никаких цен в столбце С
 

Fixer.ru

Client
Регистрация
10.09.2016
Сообщения
64
Благодарностей
13
Баллы
8
C#:
        if (doAction)
            table2.AddRow(table1.GetRow(i));
    }
кажется в этом месте кусок кода пропущен
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 101
Баллы
113
кажется в этом месте кусок кода пропущен
:D да нее!
почему-то не добавляет никаких цен в столбце С
Кажется, я понял в чем прикол))
Таблица2 в проекте состоит из двух столбцов и если попытаться добавить какое-то значение в третий столбец, то это нихера не проканывает.
Попробуй привязать Таблицу2 к файлу или поищи на форуме что-то на подобие того, как в существующую таблицу добавить пустой столбец.
Ну или можно переписать снипет так, чтоб все данные складывались в результирующую Таблицу3.

Приложил тестовый проект.

ЗЫ. Лучший вариант - это, конечно, сразу парсить в одну таблицу, как и посоветовал ZennoScript.
 

Вложения

  • 18,8 КБ Просмотры: 190
Последнее редактирование:

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