nuget server logo nuget api documents
↑

API Docs / Microsoft.VisualBasic.Runtime / Print

Print

Full name Microsoft.VisualBasic.Printing.Print Assembly Microsoft.VisualBasic.Runtime Members 9

数据打印函数: 把基础数据元素类型的集合按 GNU R 的向量格式打印, 把 NumericTable 按带边框的表格打印。用于脚本调试时快速查看数据内容。

00 Remarks

向量打印({1,3,24,23,4,23}):

 [1]  1  3 24 23  4 23
 

方括号之中是本行第一个元素的下标(与 GNU R 一致, 而不是元素个数); 超出 width(缺省 80 字符)时自动折行, 每行都带自己的起始下标 (与 R 一致地把下标标记整体右对齐, 即填充加在方括号之前):

  [1]  1  2  3 ... 25
 [26] 26 27 28 ... 40
 

元素类型的格式化规则(RFormat.ElementText()):

  • / / / / / / : 整数文本, 右对齐;
  • / : 按有效数字位数截断(缺省 7 位, 对应 R 的

options(digits=7)), 右对齐; NaN/Inf/-Inf 使用 R 的写法;

  • : True/False, 右对齐;
  • / : 带双引号的字面量, 左对齐;
  • 枚举(Enum): ToString 之后当作字符串向量的成员打印(带双引号, 左对齐);
  • Nothing 元素打印为 NA; 元素本身是集合时(例如 Double()())按 R 的

[[i]] 列表格式打印。

二维表打印(NumericTable): 表头是特征列名与标签列名, 首列是行名, 数值列右对齐, 渲染为 +---+ 边框表格。

在 VBS 脚本之中使用: 脚本里直接写 print(x) 即可(宿主会注入一个同名转发函数, 见 VBS\src\VBScript\Syntax\ScriptRefactor.vb)。之所以需要那个转发函数, 是因为在生成代码的 导入作用域之中 Print 这个名字已经被 Microsoft.VisualBasic.FileSystem 与 Microsoft.VisualBasic.CommandLine.CLITools 同时导出, VB 会直接报 BC30561 名称不明确, 因此必须由脚本所在 Module 本地声明一个同名成员来遮蔽它们。

以库的方式调用: Imports Microsoft.VisualBasic.Printing 之后即可使用 Print(data) / ToText(data)。

01 Syntax

Microsoft.VisualBasic.Printing.Print

02 Methods

NameOverloadsSummary
Print 1 把集合对象按 GNU R 的向量格式打印到 output(缺省为控制台)。
ToText 1 把集合对象渲染为 GNU R 风格的向量文本(不打印)。
Print 3 把数值二维表按带边框的表格打印到 output(缺省为控制台)。
ToText 3 把数值二维表渲染为带边框的表格文本(不打印)。
WriteLine 1 把渲染结果写出一行; output 为 Nothing 时写控制台

03 Members

method Print #
Print``1(IEnumerable(Of ``0), TextWriter, Int32, Int32)

把集合对象按 GNU R 的向量格式打印到 output(缺省为控制台)。

Type Parameters
NameDescription
T

集合的元素类型: Int32 / Byte / Single / Double / Boolean / String / Char / Int16 / Int64 / UInt32 / UInt64 / Decimal 以及枚举。

Parameters
NameTypeDescription
dataIEnumerable(Of ``0)

集合(数组 / List / 任何 IEnumerable)

outputTextWriter

输出设备, 缺省为控制台; 传入 StringWriter 可以捕获输出文本

widthInt32

每行最大字符数, 缺省 80; 传入非正数表示不折行

digitsInt32

浮点数的有效数字位数, 缺省 7

Example
 Dim x = {1, 3, 24, 23, 4, 23}
 Call print(x)
 ' [1]  1  3 24 23  4 23
 
method ToText #
ToText``1(IEnumerable(Of ``0), Int32, Int32)

把集合对象渲染为 GNU R 风格的向量文本(不打印)。

method Print #
Print(NumericTable, TextWriter, Int32)

把数值二维表按带边框的表格打印到 output(缺省为控制台)。

Parameters
NameTypeDescription
tableNumericTable

数值二维表, 可以为 Nothing(打印为 NULL)

outputTextWriter

输出设备, 缺省为控制台; 传入 StringWriter 可以捕获输出文本

digitsInt32

浮点数的有效数字位数, 缺省 7

Example
 Dim tbl = NumericTable.FromColumns({"x", "y"}, {{1, 2, 3}, {4, 5, 6}}, {"s1", "s2", "s3"})
 Call print(tbl)
 ' +----+---+---+
 ' |    | x | y |
 ' +----+---+---+
 ' | s1 | 1 | 4 |
 ' | s2 | 2 | 5 |
 ' | s3 | 3 | 6 |
 ' +----+---+---+
 
method Print overload 3 #
Print(String, TextWriter)

把字符串按 R 的标量形式打印(例如 [1] "done")。

Remarks

该重载存在的意义是优先级: String 同时也是一个 IEnumerable(Of Char), 若没有这个精确匹配的重载, print("abc") 会被当作字符向量打印为 [1] "a" "b" "c"。

method Print overload 2 #
Print(Object, TextWriter, Int32, Int32)

打印任意值: 按运行时类型分派到二维表 / 集合 / 标量的打印格式。

Remarks

脚本宿主注入的 print 转发函数就指向本重载: 脚本是一种动态场景(变量常常是 let 声明的 Object, 或者 New List(Of Double) 这类集合), 因此无法依赖编译期的重载解析, 只能在运行期判断。

Parameters
NameTypeDescription
valueObject

任意值: 二维表、集合、标量, 或者 Nothing(打印为 NULL)

outputTextWriter

输出设备, 缺省为控制台

widthInt32

集合折行的每行最大字符数, 缺省 80; 非正数表示不折行

digitsInt32

浮点数的有效数字位数, 缺省 7

method ToText #
ToText(NumericTable, Int32)

把数值二维表渲染为带边框的表格文本(不打印)。

method ToText overload 3 #
ToText(String)

把字符串按 R 的标量形式渲染(不打印), 例如 [1] "done"

method ToText overload 2 #
ToText(Object, Int32, Int32)

把任意值按运行时类型渲染为文本(不打印): 二维表 → 表格; 集合 → R 向量; 其它 → R 标量。

method WriteLine #
WriteLine(String, TextWriter)

把渲染结果写出一行; output 为 Nothing 时写控制台