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何尝不能开发一些小工具方便以后的使用呢?

原文地址:https://www.cnblogs.com/sharpeye/p/14649476.html