我有一个Hier.csv文件,看起来像这样(数千行):
value;nettingNodeData;ADM59505_10851487;CVAEngine;ADM;;USD;0.4;35661;BDR;NA;ICE;;RDC;MAS35661_10851487;CVAEngine;MA;10851487;RDC
我有另一个,Price.csv,看起来像这样:
value;nettingNodePrices;ADM68834_22035364;CVAEngine;CVA with FTD;EUR;1468.91334249291905;DVA with FTD;EUR;5365.59742483701497
我必须确保两个文件具有相同数量的行和相同的ID(每行的第三个值),并且已知的事实是来自Hier.csv的ID集更大并且包含来自Price.csv的一组id,即。 Hier.csv中的一些ID不在Price.csv中。 此外,两个文件中都没有重复项。
到目前为止,我已经尝试了以下内容,但它已经用了很长时间,而且没有工作(我可以用我的小手和Excel更快地完成它,但那不是我想要的)。< / p>
这是我的伪代码程序,因为我现在无法访问我的代码,我会尽快编辑这个问题:
for each line of Hier.csv
for each line of Prices.csv
if prices.line doesn't contain the 3rd value of hier.line
store that value in a list
end
end
end
Process p;
for each value in the list
// remove the line containing that value from Hier.csv
String[] command1 = {"sed", "'/^.*" + value + ".*$/d'", "Hier.csv", ">", "tmp.csv"};
Process p = Runtime.getRuntime().exec(command1)
end
String[] command2 = {"mv", "tmp.csv" "Hier.csv"};
Process p = Runtime.getRuntime().exec(command2)
有没有比双循环更好的方法? 为什么最后一部分(exec(命令))有效? 最后,在读取csv文件时更有效:BufferedReader或Scanner?
答案 0 :(得分:1)
您可以使用合并或哈希表。 合并: 排序两个文件并合并在一起 哈希表: 将较小的文件(ids)加载到哈希表,循环访问更大的文件并根据哈希表测试存在