小编典典

编辑CSV文件(设计实现)

java

我开始设计一个程序,该程序将基于已找到并保存到主CSV / Excel文件中的相似字符串及其标识,自动执行正确地查找和识别字符串的过程。

现在,我想适当地设计它,这样以后在实现CSV / Excel阅读写作部分时就不会遇到问题。

我可能会使用OpenCSV来读写文件,所以我的问题更多是关于如何编辑文件。

上次处理编辑CSV文件时,我不得不将每行重写为新文件或现有文件,而不仅仅是编辑特定行。这是唯一的方法吗?

前-如果我的csv是这样的

1,2,3  and i wanted to change   1,2,3
4,5,6   4,5,6 to a,b,c          a,b,c
7,8,9                           7,8,9

唯一的方法是读取每一行,如果需要的话进行更改,然后再次将其写出?有没有办法只编辑中间线?

我之所以这样问,是因为我计划通过GUI进行很多自定义用户更改,并且每次将更改写入文件都可能很糟糕?

我认为将每个行或单元格保存在数组中并编辑该数组将是更有效的解决方案。

您在编辑CSV文件时可以提供任何技巧或建议吗?

旁注:我可能会用Java进行此操作,因为我最熟悉使用Swing构建GUI的情况,但是我愿意尝试使用另一种语言进行尝试。


阅读 262

收藏
2020-11-30

共1个答案

小编典典

首先,在使问题过于复杂的过程中,将问题分解为各个部分。

问题的根源在于,您有一个包含记录的文件,您正在为其编写gui以允许用户进行编辑。

为了提高性能,您希望读取和写入同一文件,并尝试仅读取或写入一条记录。

有问题的文件为csv格式。

因此,您第一个患上感冒,因此无需克服。

我要说的第二部分与许多感叹号无关。这样做的原因是最坏的情况-
程序崩溃。此时,您已损坏了原件。如果您知道记录的数量很少,则将整个内容读入内存(例如字符串列表),然后将各个字符串解析为它们的记录,并在用户完成操作后将它们保存下来,将其写入另一个文件中完成后,您将删除原始文件并将第二个文件重命名为第一个文件。这样,如果遇到最坏的情况,您将拥有完整的原始文件,或者更改的名称不同。

如果一次无法容纳太多内存,则可以使用RandomAccessFile来读写同一文件。但是我建议您在开始时复制该文件(使用某些编辑器使用的.tmp或.swp)并对其进行处理,因为它仍然可以保护您免受可怕的崩溃的影响。

之后,这就是您处理CSV数据的方式。如果是简单文本,则可以使用Java String
split方法。如果更复杂,则openCSV具有CSVParser方法,该方法将为您将String解析为字符串数组。还有一个CSVParserBuilder,它简化了解析器的构造。

希望能有所帮助。

:)

2020-11-30