问题标签 [supercsv]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 有没有办法在java中更改csv文件中特定单元格的值?
我已经在 StackOverflow 上解决了有关此问题的其他问题,但那里提到的库只允许读取或写入。其中一些确实允许像 SuperCSV 那样进行部分读取或写入,但没有库可用于更新特定单元格的值。是否有其他可以使用的库或者我需要手动完成?
java - 使用 CsvBeanReader 读取具有可变列数的 CSV 文件
所以我正在解析一个 .csv 文件。我在 StackOverflow 的某个地方听取了另一个线程的建议并下载了 SuperCSV。我终于得到了几乎所有的工作,但现在我遇到了一个似乎很难修复的错误。
出现此问题的原因是最后两列数据可能已填充,也可能未填充。这是一个 .csv 文件的示例,其中第一行缺少最后一列,第二行完全完整:
2012:07:25,11:48:20,922,"uLog.exe","",按键,1246,341,-1.00,-1.00,1.00,Shift 2012:07:25,11:48:21,094," uLog.exe","",按键,1246,341,-1.00,-1.00,1.00,b,Shift
根据我对Super CSV Javadoc的理解,如果列数可变,则无法使用CsvBeanReader填充 Java Bean 。这看起来真的很愚蠢,因为我觉得在初始化 Bean 时应该允许这些缺失的列为 null 或其他一些默认值。
作为参考,这是我的解析器的完整代码:
以及 Entry 类的代码:
我收到的异常(请注意,这与我上面的示例不同,缺少最后两列):
是的,编写所有这些 getter 和 setter 是一件很痛苦的事情。另外,我很抱歉,我在使用 SuperCSV 时可能没有完美的约定(例如,如果您只想要未修改的字符串,则使用 CellProcessor),但您明白了。另外,这段代码显然不完整。现在,我只是想成功检索一行数据。
在这一点上,我想知道使用 CsvBeanReader 是否可以用于我的目的。如果不是,我有点失望,因为 CsvListReader(我会发布超链接,但 StackOverflow 也不允许我,也很愚蠢)就像根本不使用 API 一样简单,只使用 Scanner.next ()。
任何帮助,将不胜感激。提前致谢!
java - 使用 super csv 用 Java 写回 csv
我已经在这段代码上工作了很长一段时间,如果我走上了死胡同,我只想得到简单的提醒。我现在的重点是从不同的 .csv 文件中匹配相同的单元格并将一行复制到另一个 csv 文件中。问题真的是是否可以在特定行写,例如,如果 2 个单元格在第 50 行匹配,我希望写回第 50 行。我假设我可能会将所有内容提取到哈希图中,将其写入然后写回.csv文件?有没有更简单的方法?
例如,我有一个包含人员详细信息的 Csv,而另一个具有实际人员居住地的财产详细信息,我希望将财产详细信息复制到人员 csv,并将它们与正确的人员详细信息相匹配。希望这是有道理的
java - SuperCSV 的输出不可读?
我有一个为我的 Spring 控制器创建的实用程序类,用于调用以使用 SuperCSV 库(http://supercsv.sourceforge.net/)从一组 bean 生成 CSV
实用程序类非常基本:
问题是,我从这个操作中得到了不同的行为,我不知道为什么。当我从一个控制器(我们称之为“A”)调用它时,我得到了预期的数据输出。
当我从另一个控制器 ('B') 调用它时,我得到了一些无法被 OO Calc 打开的无法识别的二进制数据。在 Notepad++ 中打开它会产生一行不可读的乱码,我只能假设是读者试图向我展示二进制流。
控制器“A”调用(有效的调用)
...这是控制器“B”调用(失败的调用):
观察:
- 我首先调用哪个控制器无关紧要。“A”总是有效,“B”总是产生乱码
- 对该函数的两次调用都有一个标题列列表,这些标题列是传递给 CSVWriter 的 bean 中定义的总操作集的子集
- 简单的异常 printStackTrace 正在检测 bean 的反射字段何时与定义不匹配(即,无法找到 get() 以编程方式获取值),这表明所有列/变量匹配都成功。
- 在调试器中,我已经根据传递的对象数量验证了 writer.write(Object, header) 调用被命中预期的次数,并且这些对象具有预期的数据
任何建议或见解将不胜感激。我真的很难过如何更好地隔离问题......
java - 使用 superCSV 读取 80GB 的大文本文件
我想阅读一个巨大的 csv 文件。我们通常使用 superCSV 来解析文件。在这种特殊情况下,文件很大,并且由于明显的原因总是存在内存不足的问题。
最初的想法是将文件作为块读取,但我不确定这是否适用于 superCSV,因为当我对文件进行分块时,只有第一个块具有标头值并将被加载到 CSV bean 中,而其他块没有标头值,我觉得它可能会引发异常。所以
a) 我想知道我的思维过程是否正确
b) 有没有其他方法可以解决这个问题。
所以我的主要问题是
superCSV 是否具有处理大型 csv 文件的能力,我看到 superCSV 通过 BufferedReader 读取文档。但我不知道缓冲区的大小是多少,我们可以根据我们的要求更改它吗?
@Gilbert Le Blanc我已尝试根据您的建议将其拆分为较小的块,但是将大文件分解为较小的块需要很长时间。这是我为此编写的代码。
java - 使用 SuperCSV 解析器时出现问题
我创建了一个 Web 应用程序模块来将 CSV 文件导入数据库。导入过程后,用户将显示摘要,输入文件中的记录总数,导入到数据库的好记录总数和拒绝记录的总数。用户可以下载成功和错误记录进行验证。
问题是一些重复的记录被附加到成功和错误文件中。例如,用户收到如下消息:
总记录数:2099
好记录数:1694
跳过记录数:405
点击下载成功文件:Import_20121012184828_success.csv
点击下载错误文件:Import_20121012184828_errors.csv
当我们检查数据库时,表中的记录数正好是“1694”(与预期的好记录数相同。)。但在 Import_20121012184828_success.csv 文件中有 '1741' 记录。但是在 Eclipse 控制台中,它的打印结果与 db 中的相同,即在最后一次成功记录之后没有重复。所以一旦退出循环,当我调用 successCsvMapWriter.close(); 和 errorCsvMapWriter.close(); 一些从缓冲区的记录被添加的地方。我想不通。
注意:对于少量输入,我根本没有注意到任何问题。试用版本 1.52 和 2.0.0 beta。
以下是创建结果文件的代码:
提前致谢。
csv - 如何使用 Super CSV 部分读取 CSV 文件
我有一个包含 24 列的 csv 文件。其中我只想阅读 3 列。我看到超级 CSV 是一个非常强大的库,但我不知道如何部分读取 CSV。部分阅读的链接已损坏。
请帮我提供一个工作示例。
hadoop - Hadoop 与 supercsv
我必须处理非常大的文本文件中的数据(如 5 TB 大小)。处理逻辑使用 supercsv 解析数据并对其进行一些检查。显然,由于大小相当大,我们计划使用 hadoop 来利用并行计算。我在我的机器上安装了 hadoop,我开始编写映射器和减速器类,但我被卡住了。因为地图需要一个键值对,所以要读取这个文本文件,我不确定在这个特定场景中应该是什么键和值。有人可以帮我解决这个问题。
我的思考过程是这样的(让我知道我是否正确) 1)使用 superCSV 读取文件,hadoop 为 hdfs 中的每个文件块生成 supercsv bean。(我假设 hadoop 负责拆分文件) 2) 对于这些 supercsvbeans 中的每一个运行我的检查逻辑。
java - 如何在不使用引号字符的分隔文件上使用 Super CSV?
我正在使用 Super CSV 解析管道(“|”)分隔的文件。该文件不使用“文本限定符”或 Super CSV 所称的引号字符。问题是 Super CSV需要引号字符。我看不到跳过这个或提供空字符的方法。目前我正在传递一些希望永远不会出现在输入文件中的古怪 unicode 字符。
有没有办法让 Super CSV 在不使用引号字符的情况下解析文件?
java - OpenCSV - 如何将选定的列映射到 Java Bean 而不管顺序如何?
我有一个包含以下列的 CSV 文件:id
, fname
, telephone
, lname
, address
.
我有一个Person
有id
,fname
和lname
数据成员的类。我只想将这些列映射到Person
CSV 文件中的对象并丢弃telephone
和address
列。我怎样才能做到这一点?随着将来添加更多列,该解决方案必须扩展。并且无论列位置如何都应该工作。
在理想的解决方案中,用户只会指定要读取的列,它应该可以正常工作。