专栏首页SAS程序分享号号号SAS-如何简单快捷的实现RTF合并

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

今天小编打算分享一段关于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.在有了需要合并的文件后就开始了。

*获取指定路径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

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

本文分享自微信公众号 - SAS程序分享号号号(xiaocgn),作者:setup

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SAS-RTF合并之告别空白页

    日前,小编亲眼目睹了RTF合并删空白页的痛苦,数百页的文档穿插着无数无规律的空白页,删一页电脑卡半分钟。既然用了小编写的宏程序,又让小编亲眼目睹了删空白页的痛苦...

    Setup
  • Tools-在线RTF合并

    之前小编写过使用SAS实现RTF合并,日前,小编的网站也上线了RTF合并功能,支持在线文件合并。合并效率远超SAS,基本不可同日而语。当然,在线合并RTF的原理...

    Setup
  • SAS-编程中的小技巧(十一)

    “一鼓作气再而衰三而竭”,趁着还没有衰,于是小编就又开始写推文了。许久未写编程中的小技巧了,今天小编打算分享一下编程中的小技巧。

    Setup
  • mac route flag 含义

    https://apple.stackexchange.com/questions/336888/whats-the-meanings-of-the-routi...

    heidsoft
  • C#仪器数据文件解析-RTF文件

    RTF格式文件大家并不陌生,但RTF文件的编码、解码却很难,因为RTF文件是富文本格式的,即文件中除了包含文本内容,还包含文本的格式信息,而这些信息并没有像后来...

    用户1637609
  • 3种不同的SDN实现模式

    SDN的目的 软件定义网络(SDN)是电信行业冉冉升起的新星,该技术能够将网络中的较低级的功能提取到统一化的控制平面上,从而让管理员能够从中央控制台引导流量。S...

    SDNLAB
  • scrapy实战之爬取表情包

    通过上图我们可以发现我们想要的url全在class名为col-sm-9的div下,

    不断折腾
  • Mysql避免全表update

    DH镔
  • [数据清洗]-看上去一样的数字

    数据不正确(格式不正确,数据不准确,数据缺失)我们做什么都是徒劳。数据清洗时数据分析的第一步,也是最耗时的一步。 数据清洗很枯燥,但是随着数据清理技巧越来越熟练...

    数据分析
  • Swift 最长公共前缀 - LeetCode

    编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。

    韦弦zhy

扫码关注云+社区

领取腾讯云代金券