Навигация
Загрузка таблицы CSV с диска в память программы
Чтение данных из загруженной таблицы CSV
Запись данных в ячейки CSV-файла
Получение координат нужных ячеек для использования их в макросах [GETCSVDATA] и [PUTCSVDATA]
Получение текущих размеров таблицы (получение текущего количества рядов и столбцов)
Использование первоначальных размеров таблицы (которые были на момент загрузки таблицы), в качестве координат макросов [PUTCSVDATA], [GETCSVDATA], [GETCSVCOORD]
Копирование или перенос рядов ячеек таблицы (строк CSV) из одного файла в другой
Применение функций поиск-замены к ячейкам, строкам или столбцам CSV
Фильтрация строк таблицы
Дополнительные материалы:
– Подключение CSV файлов с их предварительным скачиванием по URL
– Закачка подключенных CSV на FTP при завершении парсинга контента
– Как допарсить данные в CSV-файл на диске (например, загрузить картинки)
ВАЖНОЕ ПРИМЕЧАНИЕ!
У макросов:
[GETCSVDATA], [COPYCSVDATA], [CSVREPLACE], [PUTCSVDATA], [GETCSVCOORD], [CSVREPLACE] |
Есть дублирующие макросы:
[GETCSVDATA2], [COPYCSVDATA2], [CSVREPLACE2], [PUTCSVDATA2], [GETCSVCOORD2], [CSVREPLACE2] |
Которые работают так же, но выполняются позже, чем их оригиналы.
Макросы с индексом 2 нужны, например, для вставки загруженных картинок (макросом DOWNLOADFILE) в подключенную таблицу CSV.
Учтите, индекс 2 добавляется в открывающий и закрывающий тег макроса:
[PUTCSVDATA]...[/PUTCSVDATA] -> [PUTCSVDATA2]...[/PUTCSVDATA2] |
Смотрите также:
Как допарсить данные в CSV-файл на диске (например, загрузить картинки)
Загрузка таблицы CSV с диска в память программы
Набор таблиц CSV загружается в память программы при вызове макросов [LOADCSV]. При парсинге можно загружать в память множество различных CSV с диска.
Изменения загруженных в память таблиц CSV будут записаны в файлы на диск при завершении процедуры парсинга контента.
Достаточно просто указать имя таблицы для хранения ее в памяти и путь к файлу на диске для ее загрузки:
1 2 3 4 | [LOADCSV(имя таблицы)]путь к файлу CSV[/LOADCSV] [LOADCSV(1)]C:\Content\article_all_91.csv[/LOADCSV] [LOADCSV(2)]C:\Content\article.csv[/LOADCSV] [LOADCSV(3)][UTF8]C:\Content\article121415.csv[/LOADCSV] (обратите внимание на параметр [UTF8], который будет указывать, что нужно загрузить/сохранить файл в UTF8 кодировке) |
Загрузка таблиц будет производиться только 1 раз для каждого файла при запуске парсинга контента! Так что можно смело оставлять макросы [LOADCSV] в любом месте шаблона вывода!
Если требуется вызывать [LOADCSV(1)] всегда с именем 1, но при этом открывать им разные файлы на диске, добавьте параметр [REASSIGN]
1 | [LOADCSV(1)][REASSIGN][UTF8]C:\Content\1.csv[/LOADCSV] |
Если с параметром [REASSIGN] открыть несколько разных файлов с присвоением к ним одного имени – 1, то имя 1 будет присвоено только к последнему открытому с параметром [REASSIGN] файлу (к файлу 3.csv)
1 2 3 | [LOADCSV(1)][REASSIGN][UTF8]C:\Content\1.csv[/LOADCSV] [LOADCSV(1)][REASSIGN][UTF8]C:\Content\2.csv[/LOADCSV] [LOADCSV(1)][REASSIGN][UTF8]C:\Content\3.csv[/LOADCSV] |
К файлам 1.csv и 2.csv в этом случае будет автоматически присвоено имя Unassigned.
Для затирания старого содержимого CSV при его открытии добавьте в макрос [LOADCSV] параметр {CREATE}…{/CREATE}
1 2 3 | [LOADCSV(1)] {CREATE}{ON_FIRST_CALL}"Название столбца 1";"Название столбца 2"{/CREATE} [UTF8]путь сохранения файла[/LOADCSV] |
В параметре {CREATE} задается шаблон создаваемого CSV и в нем могут быть использованы следующие модификаторы:
{ON_FIRST_CALL} – заданный шаблон будет применяться при первом открытии файла (при запуске парсинга)
{IF_EMPTY} – заданный шаблон будет применяться, если открываемый CSV пустой (при запуске парсинга)
Для загрузки CSV файла по HTTP добавьте в макрос параметр {HTTP}
1 2 3 | [LOADCSV(1)] {HTTP}URL файла{/HTTP} [UTF8]путь сохранения файла[/LOADCSV] |
Путь сохранения файла на локальный диск нужно обязательно указать (туда будут сохранен скачанный по введенному URL файл).
Чтение данных из загруженной таблицы CSV
Для взятия содержимого указанной ячейки используйте макрос [GETCSVDATA]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [GETCSVDATA(имя таблицы)]Y (номер ряда таблицы)|X (номер столбца таблицы)[/GETCSVDATA] [GETCSVDATA(1)]1|1[/GETCSVDATA] -> возьмет содержимое ячейки с индексом 1/1 (первый ряд, первый столбец) [GETCSVDATA(1)]1|2[/GETCSVDATA] -> возьмет содержимое ячейки с индексом 1/2 (первый ряд, второй столбец) [GETCSVDATA(1)]3|{text}возраст[/GETCSVDATA] -> возьмет содержимое ячейки на пересечении третьего ряда и столбца с именем "возраст" (параметр {text} указывает на текстовый тип переменной) [GETCSVDATA(1)]{text}cl164708|{text}возраст[/GETCSVDATA] -> возьмет содержимое ячейки на пересечении ряда с именем "cl164708" и столбца с именем "возраст" (параметр {text} указывает на текстовый тип переменной) [GETCSVDATA(1)]1|0[/GETCSVDATA] -> возьмет весь первый ряд ячеек (при индексе столбца = 0) [GETCSVDATA(1)]2|0[/GETCSVDATA] -> возьмет весь второй ряд ячеек (при индексе столбца = 0) [GETCSVDATA(1)]0|5[/GETCSVDATA] -> возьмет весь пятый столбец (при индексе ряда = 0) [GETCSVDATA(1)]0|5{COLROVSEP},{/COLROVSEP}[/GETCSVDATA] -> возьмет весь пятый столбец и выведет значения его ячеек через указанный разделитель - запятая (при индексе ряда = 0) Разделитель для взятия ряда или столбца указывается в параметре {COLROVSEP}РАЗДЕЛИТЕЛЬ{/COLROVSEP} Если вы хотите вывести два разных столбца рядом в таблицу CSV, то используйте в качестве разделителя макрос шаблона вывода [EXPANDV] [GETCSVDATA(1)]1+1|1[/GETCSVDATA] -> возьмет содержимое ячейки с индексом 2/1 (в индексах Y и X поддерживаются операции: "+", "-", "*", "/") |
Также в каждой из координат (Y, X) могут быть использованы один или несколько параметров {ALT}. Это нужно, когда вы используете несколько макросов [GETCSVCOORD] для получения координаты Y или X для макроса [CETCSVDATA] (чтобы, если один из макросов [GETCSVCOORD] не нашел координату, будет использован результат другого (альтернативного) макроса [GETCSVCOORD]).
Для полностью настраиваемого вывода таблицы, части таблицы или определенных ее ячеек используйте режим {YLOOP}
Чтобы активировать режим прохода по всей таблице добавьте параметр {YLOOP} (перебор всех строк таблицы) внутрь макроса [GETCSVDATA] и настройте параметры нужным образом.
1 2 3 4 5 6 | [GETCSVDATA(1)] {YLOOP} {TEMPLATE}ШАБЛОН{/TEMPLATE} {FROM}НАЧАЛЬНАЯ СТРОКА{/FROM} {ELEMENTSEP}РАЗДЕЛИТЕЛЬ ВЫВОДИМЫХ ДАННЫХ{/ELEMENTSEP} [/GETCSVDATA] |
В параметре {FROM} указывается номер строки, с которого начинать вывод данных.
В параметре {ELEMENTSEP} указываете разделитель выводимых из разных строк таблицы данных.
В параметре {TEMPLATE} настраивается шаблон выводимых данных. В этом параметре возможно использование границ парсинга и любых других макросов шаблона вывода. Для вывода ячеек ряда используйте в {TEMPLATE} операторы {CELL(n)} (где n-номер выводимой ячейки).
Например, чтобы вывести столбцы 1 и 2 используйте [GETCSVDATA] в режиме {YLOOP} с такими параметрами
1 2 3 4 5 6 | [GETCSVDATA(1)] {YLOOP} {TEMPLATE}{CELL(1)}[CSVCS]{CELL(2)}{/TEMPLATE} {FROM}1{/FROM} {ELEMENTSEP}[CSVLB]{/ELEMENTSEP} [/GETCSVDATA] |
Также в режиме {YLOOP} есть опциональный параметр {WHERE}. Этот параметр служит для взятия данных из сток с определенными значениями в ячейке указанного столбца. Например, когда нужно вывести строку с определенным артикулом или строки товаров из определенной рубрики.
Допустим, есть таблица с товарами, где в 3 столбце указаны названия рубрик. Чтобы, например, вывести ячейки 1 и 2 из строк товаров рубрики “Телевизоры” используйте макрос [GETCSVDATA] в режиме {YLOOP} с такими параметрами
1 2 3 4 5 6 7 | [GETCSVDATA(1)] {YLOOP} {TEMPLATE}{CELL(1)}[CSVCS]{CELL(2)}{/TEMPLATE} {FROM}1{/FROM} {WHERE}[ALL][3]=Телевизоры{/WHERE} {ELEMENTSEP}[CSVLB]{/ELEMENTSEP} [/GETCSVDATA] |
Обратите внимание, что в параметре {WHERE} указывается номер столбца для проверки (в примере 3). После знака равенства указывается значение (Телевизоры). Если в строке ячейка 3 будет равно значению, то данные из этой строки будут выведены в результат.
При наличии параметра [ALL] (внутри {WHERE}) будут выводиться все совпавшие во значению строки. Если убрать параметр [ALL] то будет выведено одно совпавшее значение.
Запись данных в ячейки CSV-файла
Добавление данных в загруженные таблицы CSV осуществляется с помощью макроса [PUTCSVDATA]. Сохранение изменений открытых CSV-файлов на диск производится при завершении процедуры парсинга контента.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [PUTCSVDATA(1)]10|{text}возраст|[TOPASTE]текст[/PUTCSVDATA] -> вставит "текст" в ячейку на пересечении 10 ряда и столбца с именем "возраст" (при этом произойдет перезапись существующего текста ячейки, параметр {text} указывает на текстовый тип переменной) [PUTCSVDATA(1)]10|5|{notovervrite}[TOPASTE]текст[/PUTCSVDATA] -> вставит "текст" в ячейку на пересечении 10 ряда и 5 столбца (если в ячейке будет текст, то он не перезапишется, так как есть параметр {notovervrite}) [PUTCSVDATA(1)]10|5|{merge}{br}[TOPASTE]текст[/PUTCSVDATA] -> вставит "текст" в ячейку на пересечении 10 ряда и 5 столбца (так как есть параметр {merge}, "текст" будет ДОБАВЛЕН к текущему содержимому ячейки через указанный разделитель {br} (перенос строки)) [PUTCSVDATA(1)]10|5|{merge_nodup}{br}[TOPASTE]текст[/PUTCSVDATA] -> вставит "текст" в ячейку на пересечении 10 ряда и 5 столбца с проверкой на дубль (так как есть параметр {merge_nodup}, "текст" будет ДОБАВЛЕН к текущему содержимому ячейки через указанный разделитель {br} (перенос строки), в случае, если в ячейке не содержится такого элемента, как добавляемый) Используйте в координатах оператор {lastcolumn_orig}, который выведет номер последнего столбца CSV файла: [PUTCSVDATA(1)]10|{lastcolumn_orig}+1|[TOPASTE]текст[/PUTCSVDATA] -> вставит "текст" в ячейку на пересечении 10 ряда и последнего столбца + 1 (если индекс последнего столбца = 5, то "текст" вставится в шестой столбец (так как есть +1)) Также в координате Y (номер строки) вместо одной координаты можно использовать массив, например: {YCOORDS}1,2,3{/YCOORDS} (элементы разделены запятой) В этом случае [PUTCSVDATA] будет применен несколько раз с каждым элементом массива (с каждой координатой) Получить массив координат можно с помощью [GETCSVCOORD] с параметром [GETALL] [PUTCSVDATA(1)] {YCOORDS}[GETCSVCOORD(1)]Y|1|[EXACT][GETALL],[/GETALL]Текст для поиска координат Y[/GETCSVCOORD]{/YCOORDS}|{lastcolumn_orig}+1|[TOPASTE]текст [/PUTCSVDATA] |
Также в каждой из координат (Y, X) могут быть использованы один или несколько параметров {ALT}. Это нужно, когда вы используете несколько макросов [GETCSVCOORD] для получения координаты Y или X для макроса [PUTCSVDATA] (чтобы, если один из макросов [GETCSVCOORD] не нашел координату, будет использован результат другого (альтернативного) макроса [GETCSVCOORD]).
Получение координат нужных ячеек для использования их в макросах [GETCSVDATA] и [PUTCSVDATA]
Координаты нужных ячеек (которые содержат определенный текст) можно получать с помощью макроса [GETCSVCOORD] (его нужно использовать вместо Y или X координат в макросах [GETCSVDATA] и [PUTCSVDATA])
1 2 3 4 5 6 7 8 9 | [GETCSVDATA(1)] [GETCSVCOORD(1)]Y|5|[EXACT]серебро[/GETCSVCOORD] |33[/GETCSVDATA] -> тут вместо Y используется [GETCSVCOORD], который найдет и выведет номер ряда ячейки с текстом "серебро" из пятого столбца [GETCSVCOORD(1)]Y|10|[EXACT]серебро[/GETCSVCOORD] -> выведет координату Y (номер ряда) для ячейки из 10 столбца, которая содержит текст "серебро" [GETCSVCOORD(1)]Y|{text}материал|[EXACT]серебро[/GETCSVCOORD] -> выведет координату Y для ячейки из столбца с именем "материал", которая содержит текст "серебро" (параметр {text} указывает на текстовый тип переменной) [GETCSVCOORD(1)]5|X|[EXACT]серебро[/GETCSVCOORD] -> выведет координату X (номер столбца) для ячейки из 5 ряда, которая содержит текст "серебро" Уберите параметр [EXACT] для того, чтобы искать частичное совпадение текста ячейки: [GETCSVCOORD(1)]5|X|серебро[/GETCSVCOORD] -> выведет координату X (номер столбца) для ячейки из 5 ряда, которая содержит в своем тексте подстроку "серебро" |
Если с помощью макроса [GETCSVCOORD] нужно получить не одно значение, а все, то добавьте параметр [GETALL]разделитель[/GETALL] (где разделитель – разделитель для вывода полученных значений)
1 | [GETCSVCOORD(1)]Y|1|[EXACT][GETALL], [/GETALL]3[/GETCSVCOORD] |
В макросе [GETCSVCOORD] можно использовать параметр {START}. Данный параметр служит для пропуска, например, строки заголовка при поиске координаты Y. В параметре задается стартовая строка/столбец для осуществления поиска координаты Y или X
1 | [GETCSVCOORD(1)]{START}2{/START}Y|1|[EXACT]вхождение для поиска координаты Y[VALUE][CAN_ADD][/GETCSVCOORD] |
В данном случае, когда {START}=2, поиск координаты Y будет осуществляться со второй строки CSV (по умолчанию – с первой).
1 | [GETCSVCOORD(1)]{START}3{/START}1|X|[EXACT]вхождение для поиска координаты X[VALUE][CAN_ADD][/GETCSVCOORD] |
В данном случае, когда {START}=3, поиск координаты X будет осуществляться с третьего столбца CSV (по умолчанию – с первого).
Пояснение принципа работы оператора [CAN_ADD] (для макроса [GETCSVCOORD]).
Получение текущих размеров таблицы (получение текущего количества рядов и столбцов)
1 2 | [GETCSVDATA(1)]{ROWCOUNT}[/GETCSVDATA] - выведет текущее количество рядов ячеек таблицы 1 [GETCSVDATA(1)]{COLCOUNT}[/GETCSVDATA] - выведет текущее количество столбцов таблицы 1 |
Использование первоначальных размеров таблицы (которые были на момент загрузки таблицы), в качестве координат макросов [PUTCSVDATA], [GETCSVDATA], [GETCSVCOORD]
1 2 3 | [PUTCSVDATA(1)]{lastrow_orig}+1|{lastcolumn_orig}+1|{overwrite}[TOPASTE]текст[/PUTCSVDATA] {lastrow_orig} - выведет номер последнего ряда ячеек таблицы (количество рядов ячеек таблицы на момент ее загрузки при запуске парсинга) {lastcolumn_orig} - выведет номер последнего столбца таблицы (количество столбцов таблицы на момент ее загрузки при запуске парсинга) |
Важное примечание: Чтобы значения {lastrow_orig} и {lastcolumn_orig} обновлялись при парсинге каждого последующего WEB-документа (при каждом вызове макроса [LOADCSV]), добавьте в макрос [LOADCSV] параметры {rrowc} и/или {rcolc} соответственно (в этом случае, при парсинге каждого последующего WEB-документа, у вас всегда будет доступ к актуальному последнему ряду и столбцу подключенной таблицы)
1 | [LOADCSV(1)]{rrowc}{rcolc}C:\Content\12.csv[/LOADCSV] |
Копирование или перенос рядов ячеек таблицы (строк CSV) из одного файла в другой
Перенести строку из одного CSV-файла на диске в другой можно с помощью макроса [COPYCSVDATA]
1 2 3 4 5 6 7 8 9 10 | [COPYCSVDATA(имя таблицы 1|имя таблицы 2)]Y1|X1||Y2|X2[/COPYCSVDATA] (где Y1 - номер строки первой CSV-таблицы (откуда брать строку), Y2 - номер строки второй таблицы (куда вставлять)) [COPYCSVDATA(1|2)]1|X||11|X[/COPYCSVDATA] - возьмет первую строку таблицы "1" и вставит ее на 11 строку таблицы "2" [COPYCSVDATA(1|2)]1|X||Y|X[/COPYCSVDATA] - возьмет первую строку таблицы "1" и добавит ее в конец таблицы "2" (координата Y2 не задана, указана, как Y) [COPYCSVDATA(1|2)]Y|4||Y|7[/COPYCSVDATA] - возьмет четвертый столбец таблицы "1" и вставит его в 7 столбец таблицы "2" [COPYCSVDATA({move}1|2)]1|X||11|X[/COPYCSVDATA] - перенесет первую строку таблицы "1" на 11 строку таблицы "2" [COPYCSVDATA({move}1|2)]4|X||11|X[/COPYCSVDATA] - перенесет четвертую строку таблицы "1" на 11 строку таблицы "2" [COPYCSVDATA({move}1|2)]4|X||Y|X[/COPYCSVDATA] - перенесет четвертую строку таблицы "1" в конец таблицы "2" |
Применение функций поиск-замены к ячейкам, строкам или столбцам CSV
1 2 3 4 5 6 7 8 9 10 | [CSVREPLACE(имя таблицы)]Y|X|HC||правила поиск-замены[/CSVREPLACE] (где HC - количество строк шапки CSV, при поиск-замене в указанных столбцах или в ячейках всей таблицы шапка CSV затронута не будет, можно установить значение 0) [CSVREPLACE(1)]Y|X|1||что заменить|на что заменить[/CSVREPLACE] - заменит в каждой ячейке CSV (кроме первой строки таблицы) "что заменить" на "на что заменить" [CSVREPLACE(1)]Y|X|0||что заменить|на что заменить[/CSVREPLACE] - заменит в каждой ячейке CSV (включая первую строки таблицы) "что заменить" на "на что заменить" [CSVREPLACE(1)]4|X|1||что заменить|на что заменить[/CSVREPLACE] - применит поиск-замену к каждой ячейке четвертой строки CSV [CSVREPLACE(1)]Y|4|1||что заменить|на что заменить[/CSVREPLACE] - применит поиск-замену к каждой ячейке (кроме первой) четвертого столбца CSV [CSVREPLACE(1)]Y|4|0||что заменить|на что заменить[/CSVREPLACE] - применит поиск-замену к каждой ячейке (включая ячейку строки заголовка таблицы) четвертого столбца CSV [CSVREPLACE(1)]2|4|1||что заменить|на что заменить[/CSVREPLACE] - применит поиск-замену к ячейке с координатами 2:4 (вторая строка, четвертый столбец таблицы CSV) |
Фильтрация строк таблицы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [CSVFILTER(имя таблицы)]Y|X|HC||параметры фильтрации[/CSVFILTER] (где HC - количество строк шапки CSV, при фильтрации строк шапка CSV затронута не будет, можно установить значение 0) В параметрах фильтрации указываются следующие операторы: {SEARCHENTRY} или {SEARCHENTIRE} А так же: {ACCEPT} или {DECLINE} Описание операторов: {SEARCHENTRY} - поиск вхождения(ий) {SEARCHENTIRE} - поиск точного совпадения(ий) {ACCEPT} - оставит строки таблицы, в которых в ячейке столбца X будет найдено вхождение {DECLINE} - оставит строки таблицы, в которых в ячейке столбца X НЕ будет найдено вхождение Вхождения для фильтрации указываются после операторов (через символы вертикальной черты) [CSVFILTER(1)]Y|6|1||{SEARCHENTRY}{ACCEPT}20|21|22|23[/CSVFILTER] - оставит строки таблицы, в которых в столбце 6 есть одно (или несколько) указанных вхождений (20|21|22|23) [CSVFILTER(1)]Y|10|1||{SEARCHENTIRE}{DECLINE}20|21|22|23[/CSVFILTER] - отфильтрует строки таблицы, ячейки столбца 10 которых равны одному или нескольким вхождениям (20|21|22|23) |