2012-11-25 42 views
0

我想完成以下任務。我不確定是否可以這樣做,因爲我計劃,但因此我的問題:如何在Rhino中動態使用CVS文件的數據結構 - 類

我想編寫一個Java程序,允許用戶加載XML或CSV文件,並操縱和使用他們的內容一些像Rhino或Beanshell這樣的腳本環境。 的腳本應該是這個樣子:

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」應該是什麼樣子?我也很感激一條建議,從哪裏開始尋找。 感謝你的幫助, 斯蒂芬妮

回答

0

你可能想創建一個類,將讀取文件的所有行,使用同時與BufferedReader方法readLine或通過番石榴,即has a function這不只是這個。 至於XML,您需要一個DOM解析器來加載樹中的所有文件。

然後,存儲該數據在一個LinkedList或陣列和使用整數變量作爲指標。 當調用方法next()時,如果它等於數組的大小,它將增加索引並返回false,否則返回true。它還將爲新價值賦予價值和地位。當然

Update()將更新在與字段值的索引位置的值。

問題是何時將結構寫入磁盤。你可以在最後一次調用next()時做到這一點,如果你確定它會被迭代調用直到結束,或者創建一個像flush()這樣的方法將數組寫入文件。 另一種方法是編寫update()方法,這個方法似乎是最適合您的情況。

只是爲了好奇,你在做什麼?

+0

你好Jackopo, 感謝您的回覆。在我的大學裏,我們有幾個用於評估的腳本。我的目標是將所有這些不同的腳本放在一個Java應用程序中。所有這些方法唯一共同之處在於測量數據存儲在CVS或XML文件中。 因此,閱讀文件是一個問題,但感謝您的建議,我現在有一個想法。另一個問題是如何訪問數據。由於文件的結構不同,我需要一個「動態變量生成器」... 或者我在這裏錯過了什麼? 謝謝, – Stephanie

+0

這取決於有多少不同,以及如何確定哪種結構。你的意思是CSV文件有不同的列?也就是說,有沒有其他數據,有時列的順序是不同的? – Jacopofar

+0

是的,大多數文件有不同的列。在java編譯期間,我不知道這些列是什麼。因此我在考慮Rhino給用戶一個「及時」編碼方法。 – Stephanie

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 

希望你可以做些什麼來完成你正在嘗試做的事情。

相關問題