Nin*_*ris 5 processing compiler-errors internal-compiler-error
我在这里的第一篇文章,所以我将尽量保持简单。我正在尝试使用Processing创建一些质谱数据的图。我想写一个草图,将伪XML中的数据解析为表格,然后将该数据绘制为2轴(时间,mz)上的点,而第3轴即信号作为点的颜色。
在此阶段,我希望绘图为数据的尺寸。在我的测试数据中,这是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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
错误源被标识为来自第19行:
mzTable = loadTable(mzData, "header");
Run Code Online (Sandbox Code Playgroud)
我不是黑客,但是我可以看到该代码没有错。如果我注释掉从void setup()开始的所有内容,则代码将运行,因此与将import和summary代码置于该函数之外有关。如果我在它前面放上错误代码,例如for(,那么我就期望EOF被发现为'for'。有人可以告诉我为什么吗?
提前谢谢了,
克里斯
为derp编辑20:20 1-5-15
编辑22:00 1-5-15我刚刚尝试了Processing 3.0a7中的草图,它具有更好的错误报告功能。它在第19行发现了另一个错误:令牌语法错误,请删除这些令牌。搜索此错误使我提出了有关诊断建议的问题。 令牌上的语法错误,请删除这些令牌
草图顶部唯一应该有的就是声明。你不能有像重新分配和调用println()那里的函数这样的随机代码。这样的代码需要位于函数内部。
例如,这一行很好,因为它是一个声明:
Table mzTable = new Table();
Run Code Online (Sandbox Code Playgroud)
但这行是不行的,因为它不是声明:
mzTable = loadTable(mzData, "header");
Run Code Online (Sandbox Code Playgroud)
要修复该错误,您可以将它们合并到一个声明行中:
Table mzTable = loadTable(mzData, "header");
Run Code Online (Sandbox Code Playgroud)
同样,您不能在函数外部进行这样的调用,因为它不是声明:
println("time Min: " + timeMin + ", Max: " + timeMax);
Run Code Online (Sandbox Code Playgroud)
去掉这些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
Run Code Online (Sandbox Code Playgroud)
这些不是声明,因此它们必须位于函数内部。也许尝试这样的事情:
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);
}
Run Code Online (Sandbox Code Playgroud)
虽然,像这样使用宽度和高度变量似乎是一个坏主意,所以你可以这样做:
void setup() {
size(mzTable.getColumnCount(), mzMax - mzMin);
}
Run Code Online (Sandbox Code Playgroud)
然后,处理将为您设置宽度和高度变量。