1. ホーム
  2. compiler-errors

[解決済み] EOFを期待、'<something>'を発見。

2022-02-04 16:56:50

質問

初めて投稿するので、簡単に説明します。私はProcessingを使って、いくつかの質量分析データのプロットを作成しようとしています。私は、擬似XMLからテーブルにデータをパースし、このデータを2軸(時間、mz)上の点として、第3軸(信号)を点の色としてプロットするスケッチを書きたかったのです。

この段階では、データの次元に合わせたプロットをしたいのです。私のテストデータでは、X軸に38個の時間ポイント、Y軸に51個のmzポイント、0から12,000の範囲の信号があります。実際のデータセットの境界は、すべての次元で100倍も大きくなります。

私の問題は、プロットの幅と高さがデータに依存し、これらの限界を確立するために、ちょっとしたコードが必要なことです。Processingでは size() の直後に void setup() ということで、計算コードを全部先に入れました。これがタイトルエラーを投げました。私はそれを回避することができなかったので、データを3つのcsvファイルに出力し、そのデータをインポートしてプロットするために2番目のスケッチに取り掛かりました。私は同じエラーに遭遇しました。

正確なエラーは EOF を期待、'' を発見 ここで、行の最初の単語を指定することができます。これまでは に対して , mzTable もし は、私が試したコードによります。

2つ目のスケッチの全貌はこちらです。

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( というメッセージが表示され、expecting EOF, found 'for' と表示されます。誰か理由を教えてください。

よろしくお願いします。

クリス

edited for derp 20:20 1-5-15

22:00 1-5-15 を編集 私はちょうどProcessing 3.0a7でスケッチを試したところ、エラー報告がより良くなりました。それは、ライン19で異なるエラーを識別しました。 トークンの構文エラー、これらのトークンを削除してください。 . このエラーを検索すると、この質問にたどり着き、診断の示唆を得ることができました。 トークンのシンタックスエラー、これらのトークンを削除してください。

解決方法は?

スケッチの一番上にあるべきは 宣言 . の再割り当てや呼び出しのようなランダムなコードはダメです。 println() 関数があります。そのようなコードは、関数の中に入れる必要があります。

例えば、この行は宣言なので問題ありません。

Table mzTable = new Table();

しかし、この行は宣言ではないので、ダメです。

mzTable = loadTable(mzData, "header");

そのエラーを修正するには、それらを1つの宣言行にまとめるとよいでしょう。

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);
}

しかし、このようにwidthとheightの変数を使うのは良くないと思うので、代わりに次のようにするのが良いだろう。

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

すると、処理によってwidthとheightの変数が設定されます。