Processing中获取表格数据( .tsv\.csv )的经验分享
在日常收集数据的需求中,会有很多场合用到表格数据类型,如.tsv和.csv,一来高效查看和编辑,二来数据条理清晰,导入数据结构方便。在Prcocessing中帮我预留好了loadTable()
、loadStrings()
等方法,方便读取相应字符串。不过这里有些细节值得关注,笔者简单说一说。
综述
首先.tsv
和.csv
本质上就是普通文本字符串,它够简单够易读写。
TSV【tab separated values】即“制表符分隔值”
每一个制表符预留位置为存储字符串的单元,或者可以理解为每字符串(单位数据)之间都由一个制表符来分割,如:
noshape 0 无
line 1 线
rect 2 框 矩
circle 3 圆
point 0 点
box 5 立 方
sphere 6 球
CSV 【comma separated values】即“逗号分隔值”
同上,就是每一个逗号(,)将单位数据分割开,如:
x,y,diameter,name
380.0,238.0,78.13368,Blah
362.0,162.0,69.753784,Blah
509.0,162.0,51.126663,Blah
387.0,224.0,64.408646,Blah
141.0,188.0,78.59824,Blah
252.0,122.0,41.399323,Blah
325.0,155.0,53.199966,Blah
关于.tsv
制表符分隔值需要注意每一个制表符都关系到它之后的值,什么意思呢?看下面的例子。
noshape 0 无
line 1 线
rect 2 框 矩
我在Processing中使用loadStrings()
来读取它,代码部分如下:
lines = loadStrings(addr);
for (int i = 0; i < lines.length; i++) {
String[] pieces = split(lines[i], TAB); // Load data into array
println(i+": "+pieces.length);
}
你认为输出多少值呢?正常情况下应该是
0: 3
1: 3
2: 4
可是有时候会是这个结果:
0: 4
1: 4
2: 4
?啊?what?原因在于第一行和第二行最后还留了一个制表符,如果留着就会多出一个片段(split)。删掉就得正常切分数。制表符级不容易发现,要注意了。
关于.csv
逗号分隔值也可以使用loadTable()
来读取,因为它就是一般的表格数据。表格中还可以增设行标、纵标,方便管理、读取和写入。实际上loadTable()
也可以读取其他格式,比如.tsv,只是如何提取数据是需要设计好的,详情请看官方参考的说明:
https://processing.org/reference/loadTable_.html
小结
基本数据的读写是很有必要熟练掌握的,虽然预留的函数很简单,但可以解决大部分问题了。巧用这些基本IO操作,用Processing何尝不能开发一些小工具方便以后的使用呢?