0

次の任務を遂行したいと思います。私が計画した方法でそうすることが可能かどうかはわかりませんが、私の質問は次のとおりです。

ユーザーが XML または CSV ファイルをロードし、Rhino や Beanshell などのスクリプト環境でそのコンテンツを操作および使用できるようにする Java プログラムを作成したいと考えています。スクリプトは次のようになります。

var myData = new dataLoader(“some_file.csv”);
myData.load(); // should load the content
(while myData.next()) {
  If( myData.status == “pending”) {
    myData.value = myData.value + 1;
    myData.status = “updated”; //set new status
    myData.update(); //update dataset
  }
}

Some_file.csv:

"価値"; "状態";

「1」; "保留中";

「21」; "保留中";

「341」; "保留中";

これは可能ですか (ファイルの内容に基づいてメソッド/関数/変数を動的に提供する)? もしそうなら、私のクラス「dataLoader」がどのように見えるべきか考えていますか? また、どこから調べればよいかアドバイスをいただければ幸いです。助けてくれてありがとう、ステファニー

4

2 に答える 2

0

BufferedReaderおそらく、メソッドreadLineまたはGuavaを介してwhileを使用して、ファイルのすべての行を読み取るクラスを作成する必要があります。このクラスには、これを実行する関数があります。XMLに関しては、ツリー内のすべてのファイルをロードするDOMパーサーが必要です。

次に、データをLinkedListまたは配列に格納し、整数変数をインデックスとして使用します。メソッドnext()が呼び出されると、インデックスが増加し、配列のサイズと等しい場合はfalseを返し、そうでない場合はtrueを返します。また、値とステータスを新しい値に設定します。

Update()もちろん、インデックス位置の値をフィールド値で更新します。

問題は、構造をディスクに書き込むタイミングです。next()の最後の呼び出しで、最後まで繰り返し呼び出されることが確実な場合はそれを行うことができます。またはflush()、配列をファイルに書き込むようなメソッドを作成することもできます。もう1つの方法は、update()メソッドを記述することです。これは、あなたのケースに最も適しているようです。

好奇心のために、あなたは何をしていますか?

于 2012-11-28T13:44:29.193 に答える
0

これは非常に楽しいプロジェクトであり、実現できると確信しています。

次のように、データを保持するために BeanShell で軽量のスクリプト化されたオブジェクトを使用します。

    myData(value, status) {
     return this;
    };

   listofitems = new java.util.List();
   for(entry : data) {
     listofitems.add(myData(entry.value, entry.status);
   }

これを念頭に置き、csv ファイルの行を解析してヘッダーを取得したと仮定すると、スクリプト化されたオブジェクトを動的に構築できます。

hdr1 = "value";
hdr2 = "status";
scriptedObjectStr = "myData(" + hdr1 + "," + hdr2 + ") { return this; }";

eval(scriptedObjectStr);


y = myData("Test", "Pending");
print(y.value); // Test
print(y.status); // Pending

うまくいけば、あなたがやろうとしていることを達成するために、これから何かを作ることができます.

于 2013-01-06T15:48:18.913 に答える