HTML может быть немного сложно разобрать в зависимости от того, что вы пытаетесь прочитать. У меня есть только базовое c понимание HTML, но я мог определить несколько шаблонов, чтобы они были прочитаны. Я подошел к этому следующим образом:
- Удалить теги HTML и заменить их с пробелами, используя PERL Регулярные выражения
- Проверьте строку заголовка таблицы в HTML, проверив, содержит ли она ключевое слово. В этом случае я использовал
station_no
. - Если предыдущая строка была строкой заголовка, и эта строка не пропала после удаления тегов HTML, то сейчас мы находимся в строке данных
- Возьмите каждое из необходимых нам значений, используя
scan()
Если вы хотите увидеть, как работает logi c, удалите операторы keep
и if()
, чтобы вывести все строки -by-line.
data rep;
infile src length=len lrecl=32767;
input line $varying32767. len;
line = strip(line);
/* PERL regular expression to remove HTML tags.
compbl() changes multiple spaces into one space
*/
line_notags = compbl(prxchange('s/<[^>]*>/ /', -1, line));
if(len>0);
/* Do not reset these values at the start of each row */
retain flag_table_header lag_flag_table_header;
/* Set a flag that we've encountered the table header */
if(index(line, 'station_no')) then flag_table_header = 1;
/* Check if we are currently under the table header */
lag_flag_table_header = lag(flag_table_header);
/* If we're under the table header and the line isn't missing after removing tags,
grab what we need and output. Do not output if anything else is missing.
*/
if(lag_flag_table_header AND NOT missing(line_notags) ) then do;
station_no = scan(line_notags, 1, ' ');
ts_path = scan(line_notags, 2, ' ');
parametertype_name = scan(line_notags, 3, ' ');
output;
end;
keep station_no ts_path parametertype_name;
run;
Самое важное, что нужно помнить при использовании языка шагов данных SAS, - это то, что он по своей сути является языком цикла. Программа, которую вы пишете, выполняет все действия для каждой строки набора данных. Каждый раз, когда программа встречает оператор run
, SAS переходит к новой строке и сбрасывает все ваши столбцы на отсутствующие, чтобы подготовиться к чтению следующей строки. Вы можете разрешить столбцу сохраняться между чтениями с помощью оператора retain
.
Познакомьтесь с концепцией вектора программных данных (PDV). Это действительно поможет вам понять язык шагов данных и то, как он обрабатывает вещи. Об этом есть действительно отличный пост сообщества здесь . После того, как вы освоите его, вы можете переключаться между SQL, шагами данных и процедурами для написания гибких программ, которые могут обрабатывать чудовищные наборы данных.