期待EOF,发现'<something>'

时间:2015-05-01 09:06:31

标签: compiler-errors processing internal-compiler-error

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

在这个阶段,我希望绘图是数据的维度。在我的测试数据中,x轴为38个时间点,Y为51 mz点,信号范围为0到12,000。实际数据集的界限在每个维度上都要大一百倍。

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

确切的错误是期待EOF,找到'',其中可以是一行中的第一个单词。它已经用于 mzTable if ,具体取决于我尝试过的代码。

这是完整的第二个草图:

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 我刚刚在Processing 3.0a7中尝试了草图,它有更好的错误报告。它已在第19行中识别出不同的错误:令牌上的语法错误,删除这些令牌。搜索此错误会引导我对这些问题提出诊断建议。 Syntax error on tokens, delete these tokens

1 个答案:

答案 0 :(得分:3)

草图顶部应该只有声明。你不能拥有像重新分配这样的随机代码,也不能调用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);
}
然后,

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