6

我在这里的第一篇文章,所以我会尽量保持简单。我正在尝试使用处理创建一些质谱数据的图。我想写一个草图来将伪 XML 中的数据解析成表格,然后将这些数据绘制为 2 个轴(时间,mz)上的点,第三个轴(信号)作为点的颜色。

在这个阶段,我希望情节成为数据的维度。在我的测试数据中,x 轴上有 38 个时间点,Y 轴上有 51 个 mz 点,信号范围从 0 到 12,000。真实数据集的边界在每个维度上都会大一百倍。

我的问题是绘图的宽度和高度取决于数据,建立这些限制涉及一些代码。在处理中,您只能在void setup()之后立即调用size() ,因此我将所有计算代码放在首位。这引发了标题错误。我无法解决这个问题,所以我将数据输出到三个 csv 文件,并从第二个草图开始导入该数据并绘制它。我遇到了同样的错误。

确切的错误是期望 EOF, found '',其中可以是一行中的第一个单词。它是formzTableif,具体取决于我尝试过的代码。

这是第二张完整的草图:

import java.io.*;

int debug = 1;

String target = "M1A crop.txt";  // test data


File file = new File(target);

// ~  ~  ~  

String folderPath = file.getParent(); // target folder path
String name = file.getName(); 

String mzData = folderPath + "\\" + name + " - mz data.csv" ;    // CSV file to open
String signalData = folderPath + "\\" + name + " - signal data.csv" ;    // CSV file to open
String summaryData = folderPath + "\\" + name + " - summary data.csv" ;    // CSV file to open

Table mzTable = new Table();
Table signalTable = new Table();
Table summaryTable = new Table();

mzTable = loadTable(mzData, "header");
signalTable = loadTable(signalData, "header");
summaryTable = loadTable(summaryData, "header");

int timeMin = summaryTable.getInt(0, "timeMin");
int timeMax = summaryTable.getInt(0, "timeMax");
int mzMin = summaryTable.getInt(0, "mzMin");
int mzMax = summaryTable.getInt(0, "mzMax");
int signalMin = summaryTable.getInt(0, "signalMin");
int signalMax = summaryTable.getInt(0, "signalMax");

width = mzTable.getColumnCount();  // this is the number of time points on the X axis
height = mzMax - mzMin;  // this is the number of mz points on the Y axis

println("time Min: " + timeMin + ", Max: " + timeMax);
println("mz Min: " + mzMin + ", Max: " + mzMax);
println("signal Min: " + signalMin + ", Max: " + signalMax);


void setup() {
  size(width, height);

}    // end of void setup()


void draw() {
  for(int x = 0; x < height; x++) {
    for(int y = 0; y < width; y++) {
      stroke(map(signalTable.getInt(x, y), signalMin, signalMax, 0, 255));
      point(x, y);
    }
  }  
}

错误的来源被识别为来自第 19 行:

mzTable = loadTable(mzData, "header");

我不是黑客,但我可以看到该代码没有任何问题。如果我注释掉从void setup()开始的所有内容,代码就会运行,因此它与在该函数之外具有导入和摘要代码有关。如果我在它前面放了错误的代码,例如for(然后我期待 EOF,找到 'for'。谁能告诉我为什么?

提前谢谢了,

克里斯

为 derp 20:20 1-5-15 编辑

编辑 22:00 1-5-15 我刚刚尝试了处理 3.0a7 中的草图,它有更好的错误报告。它在第 19 行发现了一个不同的错误:Syntax error on tokens, delete these tokens。搜索此错误导致我提出诊断建议的这个问题。 标记的语法错误,删除这些标记

4

1 回答 1

4

草图顶部应该有的唯一内容是声明。你不能有随机代码,比如重新分配和调用那里的println()函数。像这样的代码需要在函数内部。

例如,这一行很好,因为它是一个声明:

Table mzTable = new Table();

但是这条线是不行的,因为它不是一个声明:

mzTable = loadTable(mzData, "header");

要修复该错误,您可以将它们组合成一个声明行:

Table mzTable = loadTable(mzData, "header");

同样,您不能在函数之外进行这样的调用,因为它不是声明:

println("time Min: " + timeMin + ", Max: " + timeMax);

摆脱这些println()函数,或者将它们移到 setup() 函数中。

与这些行相同:

width = mzTable.getColumnCount();  // this is the number of time points on the X axis
height = mzMax - mzMin;  // this is the number of mz points on the Y axis

这些不是声明,所以它们必须在函数内部。也许尝试这样的事情:

void setup() {
  width = mzTable.getColumnCount();  // this is the number of time points on the X axis
  height = mzMax - mzMin;  // this is the number of mz points on the Y axis
  size(width, height);
}

虽然,使用这样的宽度和高度变量似乎是个坏主意,但您可以这样做:

void setup() {
  size(mzTable.getColumnCount(), mzMax - mzMin);
}

然后处理将为您设置宽度和高度变量。

于 2015-05-01T16:49:30.677 回答