0

我想完成以下任务。我不确定是否可以按照我计划的方式这样做,但因此我的问题是:

我想编写一个 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”应该是什么样子吗?我也很感激从哪里开始寻找一条建议。谢谢你的帮助,斯蒂芬妮

4

2 回答 2

0

您可能想要创建一个类,该类将读取文件的所有行,使用BufferedReader方法readLine或通过 Guava使用一段时间,该类具有执行此操作的功能。对于 XML,您需要一个 DOM 解析器,它将加载树中的所有文件。

然后,将数据存储在 aLinkedList或数组中,并使用整数变量作为索引。调用该方法时next(),它将增加索引,如果它等于数组的大小,则返回 false,否则返回 true。它还将值和状态设置为新值。

Update()当然会用字段值更新索引位置的值。

问题是何时将结构写入磁盘。您可以在最后一次调用 next() 时执行此操作,如果您确定它将被迭代调用直到结束,或者创建一个类似的方法flush(),它将数组写入文件。另一种方法是编写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 回答