我正在观察特定股票在30天内的表现。我从Yahoo finance下载了数据,该数据显示为CSV文件。如果我想在我的数据集中创建一个新列,以显示使用java refer to column H as where the output should appear打开和关闭之间的每日百分比变化,我应该怎么做?
提前致谢!
答案 0 :(得分:0)
您可以逐行编辑文件,并使用concat()功能添加分隔符。
使用FileReader or BufferedReader打开文件,然后开始解析。
官方Javadoc:https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#concat(java.lang.String)
另请参阅this。
答案 1 :(得分:0)
使用OpenCSV:http://opencsv.sourceforge.net/
public class OpenCSVTest {
public static void main(String[] args) {
StringWriter target = new StringWriter();
try(CSVReader reader = new CSVReader(new StringReader("my,test"));
CSVWriter writer = new CSVWriter(target);) {
for(String[] line : reader) {
String[] added = Arrays.copyOf(line, line.length + 1);
added[added.length-1] = "addition";
writer.writeNext(added);
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(target.toString());
}
}
您可以将StringReader
和StringWriter
替换为您的输入和输出。然后,读者将为您迭代csv中的每一行。您可以复制原始行并添加新列并将其写入目标。
代码细分:
try(CSVReader reader = new CSVReader(new StringReader("my,test"));
CSVWriter writer = new CSVWriter(target);) { ... }
这是一个try-with-resources块。它确保读者和作者在完成后关闭。
for(String[] line : reader) {
String[] added = Arrays.copyOf(line, line.length + 1);
added[added.length-1] = "addition";
writer.writeNext(added);
}
这是循环的标准。 CSVReader实现了Iterable
接口,使我们能够直接在for循环中使用它。
Arrays.copyOf(line, line.length + 1);
是一个函数,它创建传递给它的数组的副本,但是具有新的大小。由于您要添加列,我们会复制原始数组my,test
并在其末尾添加1个空格,然后我们可以通过执行以下操作为其分配新值:added[added.length-1] = "addition";
最后,我们将它传递给编写器,编写器然后将值正确地写入目标,在本例中为StringWriter
,在您的情况下可能是文件。