EN
【技术】走进RTF及其SAS应用,助力输出各种统计分析报表
2024-07-25 16:40

  一  、什么是RTF?

RTF是Rich Text Format的缩写,即富文本格式,又称多文本格式。是由微软公司开发的,应用美国信息交换标准代码 (ASCII) 对格式化的文本和图形编码的一种方法。

RTF不仅保存了文本的文字及其格式化信息,还可在不同的操作系统和文字处理软件中查看、编辑和保存,因此在临床研究中广泛应用于各种统计分析报表TFLs(Tables、Figures、Listings)中。

1.png

RTF内容繁复,本文只对RTF进行简单介绍,更多内容可参考微软公司于2008年3月发布的最新官方说明Rich Text Format (RTF) Specification, Version 1.9.1(Rich Text Format (RTF) Specification Version 1.9.1 - DocsLib)。

2.png

  二 、RTF的基础知识

RTF文件通常是7位ASCII纯文本,由未格式的文本(unformatted text)、控制字(control words)、控制符(control symbols)和组(groups)构成。

此外,RTF通过换行来标记一个文本行的结束,因此是不限制文本行的最大长度的。

1.RTF的基本构成

  • 未格式化的文本(unformatted text)

未格式化文本unformatted text)是指由没有任何特殊格式(如粗体、斜体或字体颜色)的字符组成的纯文本。

控制字(control words)和控制符号(control symbols)作为格式化命令,可以告诉RTF阅读器如何管理和显示RTF文档。

  • 控制字(control words)

控制字由反斜杠(\)、ASCII字母序列和分隔符组成:

\ASCII字母序列<分隔符>

■控制字的名称不能超过32个字母。

■每个控制字均以一个反斜杠(\)开头。

■ASCII字母序列由26个英文字母组成,区分大小写。

■分隔符标记RTF控制字的结束, 可以是下列各项之一:

a.一个空格,这时空格是控制字的一部分。

b. 一个数字或连字符(-),表示跟随的是一个参数。这个参数可以是正数或者负数,它的取值范围通常是从-32767到32767。

c. 任何非字母和数字的其他字符。这种情况下,此分隔字符结束控制字,而它并不属于控制字的一部分。

当控制字没有参数或具有非零参数时,该控制字启用该属性。

示例:\b ► 启用“粗体”。

当控制字的参数为0时,该控制字关闭该属性。

示例:\b0 ► 关闭“粗体”。

  •  控制符(control symbols)

控制符(control symbols)由一个反斜杠(\)跟随单个非字母字符组成。由于控制符号没有分隔符,控制符后面的空格被视为文本,而不是分隔符。

示例:\~ ► 一个不换行空格。

  • 组(groups)

组(groups)由包括在大括号({})中的纯文本、控制字或控制符组成。左扩符({)表示组的开始,右扩符(})表示组的结束。每个组指定受该组影响的文本以及该文本的不同属性,在组中指定的格式只影响该组中的文本。

示例:{\f0\fbidi \froman\fcharset0\fprq2 Times New Roman; } ► 定义字体f0为Times New Roman。

3.png

2.RTF的基本结构

从结构上讲,它由两部分组成——文件头(header)和文档区(document area)。

  • 文件头(header)

文件头(header)是应用程序如何呈现RTF文件的各种文档属性的集合。它让RTF阅读器知道如何解释控制命令,格式化和显示文档区域。

1.png

注意:如果文件中包含字体、文件、样式、颜色、修订标记、摘要信息组和文档格式属性,则它们必须出现在 RTF 文件头中,位于 RTF 正文之前。如果没有使用任何组的内容,则可以省略该组。使用在另一个组中定义的属性的任何组必须出现在定义这些属性的组之后。例如,颜色和字体属性必须在样式组之前。

  • 文档区(document area)

一旦定义了RTF文件头,RTF阅读器就有足够的信息来正确读取实际文档文本。文档区(document area)包含纯文本及其格式化信息。

2.png

  三、举个例子

1.用RTF码演示一下“Hello World!”

  •  step1:打开记事本,输入以下代码

{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052

{\fonttbl

{\f0\fmodern\fprq6\fcharset134 \'cb\'ce\'cc\'e5;}

}

{\*\generator Msftedit 5.41.21.2500;}

\viewkind4\uc1\pard\lang2052\f0\fs60 Hello World!\par

}

4.png

  • step2:另存为.rtf文件

5.png


2.对该RTF文件的解读如下(红色)

33.png

  四、RTF的SAS应用

1. SAS如何输出RTF文档?

在SAS中,我们通常使用ODS RTF语句输出RTF文档。

ods rtf file="&rootpath.\class.rtf";  

proc print data=sashelp.class;  

run; 

ods rtf close;

66.png

77.png

2. SAS如何读入RTF文档?

在SAS中,我们可以使用data步中的INFILE语句来读取RTF文档。

data rtf;

length rtfcode $32767;

infile "&rootpath.\class.rtf" lrecl=32767 end=eof;

input ;

rtfcode = _infile_;

run;

8.png

9.png

将RTF文件读入sas数据集后,我们可以使用各种sas语句来操作RTF码,从而修改RTF文档。例如,将字体CSongGB18030C-Light、Times全都更改为字体Times New Roman。

data change_font;

set rtf;

if index(rtfcode,"Times")>0 then rtfcode=tranwrd(rtfcode,"Times","Times New Roman");

if index(rtfcode,"CSongGB18030C-Light")>0 then rtfcode=tranwrd(rtfcode,"CSongGB18030C-Light","Times New Roman");

run;


data _null_;

file "&rootpath.\class.rtf" lrecl=32767;

set change_font;

put rtfcode;

run;


10.png

11.png

总结  

RTF对格式化的文本和图形进行编码,既保存了文本的文字及其格式化信息,还使其拥有强大的跨平台兼容性,目前在临床研究行业中广泛应用于各种统计分析报表。掌握好RTF,有助于SAS程序员更好地输出格式统一、美观的统计分析报表。

我们如何帮您呢?凯莱英临床(凯诺)专业团队为您尽快提供服务