如何有效地更改csv文件中的分隔符?

时间:2014-03-11 22:20:27

标签: java csv

我有一个csv文件。当前分隔符为,。我想用|替换所有逗号。

当然,所有逗号都是指那些用作分隔符的逗号。例如,双引号"some text, text"内的逗号不是分隔符,不应替换为|

基本上这是一个非常简单的任务,Excel文件很小。但如果它很大,那么?什么是最有效的方式?


我可以使用openCSV API但是,逐行读取太慢(我的数据集很大)

或者我可以使用缓冲读取器,因为它逐行读取也很慢。

有没有更有效的方法将,分隔符文件转换为|文件?


(PS:我有一个代码,我没有在这里发布。它基本上是逐行读取的。我甚至尝试过多线程,但我的50,000,000行仍然在一小时内被转换,这是非常缓慢的)

2 个答案:

答案 0 :(得分:3)

请查看https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem

您正在询问一个非常具体的解决方案,并且没有用一个单词提及实际问题。

问自己两个问题:

1。)为什么是具有错误分隔符的CSV?你可以在世代期间改变吗?

2。)为什么您的应用程序是否要求CSV文件具有某些分隔符,而不是让用户定义文件中使用的分隔符?

答案 1 :(得分:1)

您基本上有两个选择:

  1. 编写您自己的CSV解析器
  2. 使用现有的CSV库
  3. 对于(1),如果数据集中的所有记录均为1行,则可以使用readLine()类的BufferedReader方法读取它们,并且可以为每条记录(行)读取它们逐个字符地读/写,确保不替换转义的分隔符(例如,引号内的逗号)。如果数据集具有复杂的特殊情况,如多行记录或其他类型的转义字符(例如'\,'),则不要尝试(1)并遵循最佳方法,在所有情况下都是(2)。< / p>

    CSV库(选择保留字段间空格的库,如OpenCSV)将允许您非常快速地读取所有记录(按每秒数十或数十万条记录的顺序,具体取决于多少记录有的字段)并提取所有字段,然后通过将它们连接到记录中来重写到磁盘,由新的分隔符分隔。

    整个任务不需要1小时。它应该在15'左右可行。