期待 EOF,找到“<something>”
expecting EOF, found '<something>'
我的第一个 post 在这里,所以我会尽量保持简单。我正在尝试使用 Processing 创建一些质谱数据图。我想写一个草图来将 pseudo-XML 中的数据解析到表格中,然后将这些数据绘制为 2 轴(时间,mz)上的点,第三轴,信号,作为点的颜色。
在这个阶段,我希望绘图是数据的维度。在我的测试数据中,x 轴上有 38 个时间点,Y 轴上有 51 个 mz 点,信号范围为 0 到 12,000。真实数据集的边界在每个维度上都会大一百倍。
我的问题是绘图的宽度和高度取决于数据,建立这些限制涉及一些代码。在 Processing 中你只能在 void setup() 之后立即调用 size() 所以我把所有的计算代码放在前面。这引发了标题错误。我无法解决这个问题,所以我将数据输出到三个 csv 文件并开始绘制第二个草图以导入该数据并绘制它。我 运行 遇到了同样的错误。
确切的错误是 expecting EOF, found '',其中可以是一行中的第一个单词。根据我试过的代码,它是 for、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() 开始的代码 运行s 的所有内容,那么它与在该函数之外具有导入和摘要代码有关。如果我在它前面放了错误的代码,比如 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
你的草图顶部唯一应该有的是声明。你不能有随机代码,比如重新分配和调用 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);
}
Processing 将为您设置宽度和高度变量。
我的第一个 post 在这里,所以我会尽量保持简单。我正在尝试使用 Processing 创建一些质谱数据图。我想写一个草图来将 pseudo-XML 中的数据解析到表格中,然后将这些数据绘制为 2 轴(时间,mz)上的点,第三轴,信号,作为点的颜色。
在这个阶段,我希望绘图是数据的维度。在我的测试数据中,x 轴上有 38 个时间点,Y 轴上有 51 个 mz 点,信号范围为 0 到 12,000。真实数据集的边界在每个维度上都会大一百倍。
我的问题是绘图的宽度和高度取决于数据,建立这些限制涉及一些代码。在 Processing 中你只能在 void setup() 之后立即调用 size() 所以我把所有的计算代码放在前面。这引发了标题错误。我无法解决这个问题,所以我将数据输出到三个 csv 文件并开始绘制第二个草图以导入该数据并绘制它。我 运行 遇到了同样的错误。
确切的错误是 expecting EOF, found '',其中可以是一行中的第一个单词。根据我试过的代码,它是 for、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() 开始的代码 运行s 的所有内容,那么它与在该函数之外具有导入和摘要代码有关。如果我在它前面放了错误的代码,比如 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
你的草图顶部唯一应该有的是声明。你不能有随机代码,比如重新分配和调用 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);
}
Processing 将为您设置宽度和高度变量。