我有一个文本文件“celldata.txt”,其中包含一个非常简单的数据表。
1 2 3 4
5 6 7 8
9 10 11 12
1 2 3 4
2 3 4 5
问题在于访问某个列和行的数据。 我的方法是使用loadTable加载。
Table table;
int numCols;
int numRows;
void setup() {
size(200,200);
table = loadTable("celldata.txt","tsv");
numRows=table.getRowCount();
numCols=table.getColumnCount();
}
void draw() {
background(255);
fill(0);
text(numRows +" "+ numCols,100,100); // Check num of cols and rows
println(table.getFloat(0,0));
}
问题1:当我这样做时,它表示行数为5,列数仅为1.为什么不是5 x 4?
问题2:为什么table.getFloat(0,0)“NaN”而不是数据的第一个元素?
我想稍后使用更大的矩阵并使用getFloat(i,j)之类的东西访问某些元素(double类型),并能够遍历所有元素。 使用与我相同的示例数据,有人可以帮我理解我的代码有什么问题以及如何访问文本文件的数据?我应该使用另一种方法而不是loadTable吗?
答案 0 :(得分:0)
您已告知处理该文件包含标签分隔值(使用"tsv"
选项),但您的文件包含空格分隔值。< / p>
由于您的文件不包含任何选项卡,因此它将整行读取为单个值。因此,您的表格的0,0
位置为1 2 3 4
,这不是数字 - 因此NaN
。这也是为什么它认为你的表只有一列。
您应该将celldata.txt
文件修改为实际用制表符而不是空格分隔:
1 2 3 4
5 6 7 8
9 10 11 12
1 2 3 4
2 3 4 5
您也可以用逗号分隔它们,然后使用"csv"
选项。
如果您仍然遇到问题,可以通过在saveTable(table, "data/new.csv");
功能的末尾添加setup()
然后查看该文件来查看处理内容。它将是一个由逗号分隔的值列表,因此您可以准确地看到Processing认为表格单元格的位置。