我有一个csv文件。当前分隔符为,
。我想用|
替换所有逗号。
当然,所有逗号都是指那些用作分隔符的逗号。例如,双引号"some text, text"
内的逗号不是分隔符,不应替换为|
基本上这是一个非常简单的任务,Excel
文件很小。但如果它很大,那么?什么是最有效的方式?
我可以使用openCSV API但是,逐行读取太慢(我的数据集很大)
或者我可以使用缓冲读取器,因为它逐行读取也很慢。
有没有更有效的方法将,
分隔符文件转换为|
文件?
(PS:我有一个代码,我没有在这里发布。它基本上是逐行读取的。我甚至尝试过多线程,但我的50,000,000行仍然在一小时内被转换,这是非常缓慢的)
答案 0 :(得分:3)
请查看https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem
您正在询问一个非常具体的解决方案,并且没有用一个单词提及实际问题。
问自己两个问题:
1。)为什么是具有错误分隔符的CSV?你可以在世代期间改变吗?
2。)为什么您的应用程序是否要求CSV文件具有某些分隔符,而不是让用户定义文件中使用的分隔符?
答案 1 :(得分:1)
您基本上有两个选择:
对于(1),如果数据集中的所有记录均为1行,则可以使用readLine()
类的BufferedReader
方法读取它们,并且可以为每条记录(行)读取它们逐个字符地读/写,确保不替换转义的分隔符(例如,引号内的逗号)。如果数据集具有复杂的特殊情况,如多行记录或其他类型的转义字符(例如'\,'
),则不要尝试(1)并遵循最佳方法,在所有情况下都是(2)。< / p>
CSV库(选择保留字段间空格的库,如OpenCSV)将允许您非常快速地读取所有记录(按每秒数十或数十万条记录的顺序,具体取决于多少记录有的字段)并提取所有字段,然后通过将它们连接到记录中来重写到磁盘,由新的分隔符分隔。
整个任务不需要1小时。它应该在15'左右可行。