前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAS-如何简单快捷的实现RTF合并

SAS-如何简单快捷的实现RTF合并

作者头像
Setup
发布2019-10-20 14:33:40
2.9K0
发布2019-10-20 14:33:40
举报
文章被收录于专栏:SAS程序分享号号号

今天小编打算分享一段关于RTF合并的小程序...在平时出Tabel的过程中,很多人都是一个表一个表的出,最后要面临一个RTF合并的过程,很多公司都有自己的方式进行合并,小编虽然没见过他们的代码,但是以小编浅薄的经验来看,原理大概也是大同小异。这篇推文小编要介绍的是小编用SAS实现RTF合并的原理以及过程。

RTF合并原理

首先要问一下。你有试过用记事本打开RTF文件吗?打开会发现什么呢。

显而易见,是一堆不说人话的编码...就是这样的一堆编码,是RTF合并成功与否的关键。SAS实现RTF合并的原理就是将RTF导入到SAS数据集中,然后通过数据集的追加,以及对编码的简单的处理,接着再输出,就完成了RTF的合并

中间需要对编码处理的也不多,只要处理到满足RTF的格式就够了。一共只需要处理3个地方。

1.除首个RTF外,其他RTF第一行的“{”要删除。

2.除最后一个RTF外,其他RTF最后一行的“}”要删除。

3.在每个俩个RTF编码间插入下面这一串编码。

\sect\sectd\linex0\endnhere\pgwsxn15840\pghsxn12240\lndscpsxn\headery1440\footery1440\marglsxn1440\margrsxn1440\margtsxn1440\margbsxn1440

嗯,上面操作做完就大功告成了!虽然今天只测试了一次,但理论上没啥问题,并且也成功了。小编日常也用不上这种合并。

今天看有人在问RTF的合并,所以临时兴起,写了一下。下面来看看小编实现过程的代码。

实现过程

1.为了测试功能,小编先生成了3个单独的RTF文件。

生成代码如下:文末会上传至百度网盘,以供下载测试用。

2.在有了需要合并的文件后就开始了。

代码语言:javascript
复制
*获取指定路径RTF文件名称;
filename xcl_fil pipe "dir D:\日常练习\Back_temp_1\Combine\Table\TFL\*.rtf /b/s"; 
data add_rtflist;
   infile xcl_fil truncover;
   input fname $char1000.;
     rtffn=strip("filename rtffn")||strip(_N_)||right(' "')||strip(fname)||strip('" lrecl=5000;');
run;
*在获取文件名称后,可以改变数据观测的顺序,以实现rtf文件合并的先后顺序(此处小编就不操作了);
%macro  doloop;
data  _null_;
  set add_rtflist end=last;
     call execute(rtffn);
  if last then call symput('maxn',vvalue(_N_));
run;
%put &maxn.;
%do i=1 %to &maxn.;
/*将文件导入SAS中,变成SAS数据集*/
  data have&i. ;
    %let _EFIERR_ = 0;
    infile rtffn&i.    ;
    informat line $5000.;format line $5000.;length line $5000.;input line $ @@;run;

/*实现上面说的三个处理过程:
    1.除首个RTF外,其他RTF第一行的“{”要删除。
    2.除最后一个RTF外,其他RTF最后一行的“}”要删除。
    3.在每个俩个RTF编码间插入一行。这样一行放下面一串代码。
    \sect\sectd\linex0\endnhere\pgwsxn15840\pghsxn12240\lndscpsxn\headery1440\footery1440\marglsxn1440\margrsxn1440\margtsxn1440\margbsxn1440
*/

%if  &i. eq 1 %then %do;
data want;
  set have&i. end=last;
  if last then line="\pard";
run;
%end;
%if  &i. ne 1 %then %do;
proc sql;
insert into want(line) values ('\sect\sectd\linex0\endnhere\pgwsxn15840\pghsxn12240\lndscpsxn\headery1440\footery1440\marglsxn1440\margrsxn1440\margtsxn1440\margbsxn1440');
quit;
data have&i.;
  set have&i. end=last;
  if last then line="\pard";
  if _n_=1 then line=substr(line,2);
run;
data want;
  set want  have&i. ;
run;
  %if  &i. eq &maxn. %then %do;
data want;
  set want end=last;
  if last then line="\pard}";
run;
  %end;
%end;

%end;
/*
文件输出成合并完成后的RTF
*/


  data _null_;
     set want;
     file "D:\日常练习\Back_temp_1\Combine\Table\new_file.rtf" lrecl=5000;
     put line;
  run;

%mend;
%doloop;

合并后结果如下:

测试过程程序可以点击下面网盘链接下载。

百度网盘链接:https://pan.baidu.com/s/1wlkpTSyhxwLKPgGoRGaiog

整个代码其实很少,一点也不多。代码可以直接复制拿去用!只需要修改几个路径就可以了!程序写的很粗糙,很多地方可以优化,小编日常也用不上,就懒得优化了

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SAS程序分享号号号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档