我有一个xml文件,其中仅包含一个长度超过32767的文本行.目前,SAS在第32767个字符处将其截断,并停止进一步读取该行.
任务是将输入行拆分为单独的变量或单独的观察值.
我用来读取文件的代码是:
data out (drop=v_length);
length xml_text $32767;
retain xml_text v_length gr_split;
infile tempxml encoding='utf-8' end=last;
input;
if _n_ = 1 then do;
v_length = length(left(_infile_));
gr_split = 1;
end; else
v_length=v_length+length(left(_infile_));
if v_length gt 32767 then do;
gr_split + 1;
v_length=length(left(_infile_));
end;
if _n_ = 1 or v_length=length(left(_infile_)) then do;
xml_text = compress(left(_infile_),,'c');
end; else
xml_text = trim(xml_text)||compress(left(_infile_),,'c');
if last then do;
call symput('NumOfTextGroups',gr_split);
call symput('LastRow',_n_);
end;
run;
当整个xml长度不超过32767时,代码将生成一个单元格.否则,它输出n行.在第一种情况下,我可以直接在Oracle中解析它(一旦将数据传递到那里).第二,我首先将数据带到Oracle,然后在那里组装单元进行解析.
但是,它仅在xml文件的每一行少于32767个字符时才起作用.