LabVIEW 写文本文件:数组一进去,文件就大一圈

本文是「CLAD 例题精讲 · 第 20 讲」系列之一。第 20 讲的主题是文件与报表 IO,核心问法只有一个:写入之后,文件里到底是什么字符。这道 2012 年的老题,问的就是其中最常见的一种"变胖"。

01 题目

NI Daily CLAD 2012-08-28。两个程序框图几乎一模一样:都用 Open/Create/Replace File → Write to Text File → Close File 这条标准链,都往 c:\temp 下写文件,写的内容也都是同一句话 "Steve Likes LabVIEW"。区别只有一处:上面那个 VI 写入的是一个字符串数组 ,下面那个写的是一个单字符串。

问:两个文件的大小关系是什么?

  • a) steve.txt 和 steve2.txt 一样大
  • b) steve.txt 比 steve2.txt 大
  • c) steve.txt 比 steve2.txt 小
  • d) 由于出错 steve.txt 没有被创建,steve2.txt 更大

题面:上下两个 VI,只有输入类型不同(NI Daily CLAD 2012-08-28)

02 答案

B。写数组的那个文件更大。

03 为什么

Write to Text File 遇到字符串数组 输入时,不是把数组当成一坨数据原样写进去,而是逐个元素写,并且每写完一个元素,自动附加一个行结束符(Windows 上是回车加换行,CRLF,2 个字节)。

这意味着,哪怕数组里只有 1 个元素、内容和单字符串完全一样,文件也会多出行结束符的字节;数组有 N 个元素,就多 N 个行结束符。内容相同,大小不同,差值正好是元素个数乘以行结束符的字节数。

d) 选项是干扰项里最唬人的一个:输入类型从字符串换成字符串数组,Write to Text File 的多态输入本来就同时接受这两种类型,不存在类型冲突,不会报错。文件照样创建,只是大了一圈。

04 容易栽的坑

第一个坑:以为"内容一样,大小就一样"。 文件大小是字节数,不是字符数。行结束符也是字节,只是你在记事本里看不出来它"多了什么"。

第二个坑:以为行结束符只算 1 个字节。 Windows 上 CRLF 是 2 个字节。CLAD 好几道题的数字题眼都卡在这 1 个字节上------后面第 20-46 题还会专门算一次这笔账。

第三个坑:把"自动附加"当成"总会附加"。 这个自动行为只针对数组元素之间和末尾;写入单个字符串时,Write to Text File 不会画蛇添足地补行结束符。

05 工程里怎么用

写表格数据就顺着这个行为来。 一行一条记录的 CSV 风格日志,直接把每行构造成数组元素交给 Write to Text File,行结束符自动补齐,读回来的时候用 Read Lines 逐行取,两端天然对齐。

要精确控制字节数,就别走文本路线。 二进制文件(Write to Binary File)写多少字节就是多少字节,没有行结束符这种"暗仓",上位机之间传递定长记录时更可控。

排查"文件怎么比预期大"时,第一件事数换行。 把文件用十六进制看一眼,行结束符 0D 0A 的个数乘以 2,就是多出来的那一截。

一句话总结:文本文件的大小 = 字符数 + 行结束符,数组写入自带行结束符,这笔账 LabVIEW 替你记着,出题人也替你记着。

相关推荐
LabVIEW开发4 小时前
LabVIEW FPGA 编程:少编译几次的办法(系列 04/05)
fpga开发·labview
LabVIEW开发4 小时前
LabVIEW Format Into File:%d 和 %f 差了 6 个字节
labview
LabVIEW开发17 小时前
LabVIEW CompactRIO 编程模式怎么选(系列 02/05)
fpga开发·labview
LabVIEW开发20 小时前
LabVIEW 拆子 VI:9 种框选,4 种能拆
labview
LabVIEW开发1 天前
LabVIEW 连接板:28 个端子怎么排,优先级怎么定
java·算法·labview
LabVIEW开发4 天前
34970A:接 LabVIEW 常踩的 5 个坑
labview·labview知识·labview功能·labview程序
LabVIEW开发5 天前
LabVIEW 局部变量为何引发竞争条件?四种同步机制
开发语言·labview
LabVIEW开发5 天前
LabVIEW 初学者架构怎么选?跟着痛点升级
labview
LabVIEW开发6 天前
LabVIEW 机载 DIAL:每秒万次甲烷测量
人工智能·labview·labview知识·labview功能·labview程序