gpt4 book ai didi

sas - 在 SAS 中读取超过 32767 个字符的文本行

转载 作者:行者123 更新时间:2023-12-04 19:41:45 26 4
gpt4 key购买 nike

我有一个 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 个字符时才有效。

最佳答案

如果您可以一次输入 32767,那么您应该使用 recfm=f(固定记录长度)。这将创建 32767 行。

data for_oracle;
infile "\wherever\blah.xml" lrecl=32767 recfm=f truncover;
input @1 myline $CHAR32767.; *char is important in case a space exists that you care about at the start;
run;

您仍然可以做一些与您在代码中做的相同的事情(但我怀疑除了压缩控制字符外不需要大部分)。

关于sas - 在 SAS 中读取超过 32767 个字符的文本行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29672148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com