0

我想在关键字“data-base-url”之前包含一个换行符,只有当它没有时。

输入文件

    </html>
    <et1>
    <a data-linked-resource-type="userinfo" data-base-url="https://url.com/c">USERNAME 1</a>
    <td class="conTd">
    INFO 1
    </td>
    </et1>

    <et2>
    <a data-linked-resource-type="userinfo" 

    data-base-url="https://url.com/c1">USERNAME 2</a>
    <td class="conTd">
    INFO 2
    </td>
    </et2>

    <et3>
    <a data-linked-resource-type="userinfo" 
    data-base-url=
    "https://url.com/c2">USERNAME 3</a>
    <td class="conTd">
    INFO 3
    </td>
    </et3>
    </html>

    /* data program */
    data inp;
    infile "c:/tmp/output.txt";
    input @'data-base-url=' user_info $30000. 
    @'<td class="conTd">' details $30000.;
    run;
    /* data program ends */

et3 标签是必需的模式。如果您为输入文件运行上述程序,您将仅将 et3 标签正确转换为 user_info 和 details 列,但我想在前两个标签中包含换行符以获得所需的输出。提前致谢。

问候, AKS

4

1 回答 1

1

这是我的解决方案,它基于您的输出数据集inp,而不是您的问题本身,因为使用此解决方案无需修改您的输入文件。

基本上,您将输入文件的每一行作为单个 SAS 行读取并从那里操作数据。随时修改记录长度。

  data inp;
    infile "/sascr/user/me/output.txt" truncover lrecl=200;
    input string $200. ;
    lstr = lag(string);
    if lstr='<td class="conTd">' then details = string;
    if string='<td class="conTd">' then _info = lstr;
    user_info = scan(lag(_info),-1,'=');
    if length(strip(details))>1 then output;
    keep details user_info;
 run;

希望这有帮助。

于 2016-06-17T10:31:52.243 回答