将 SuperCsv 与多个变量列结合使用

2024-01-15

我正在查看 Super CSV 中的这个示例website http://supercsv.sourceforge.net/examples_reading_variable_cols.html这表明 dateofbirth 是可选列。如果我有多个可选列,会发生什么情况?代码将如何变化?

 private static void readVariableColumnsWithCsvListReader() throws Exception {

        final CellProcessor[] allProcessors = new CellProcessor[] { new UniqueHashCode(), // customerNo (must be unique)
                new NotNull(), // firstName
                new NotNull(), // lastName
                new ParseDate("dd/MM/yyyy") }; // birthDate

        final CellProcessor[] noBirthDateProcessors = new CellProcessor[] { allProcessors[0], // customerNo
                allProcessors[1], // firstName
                allProcessors[2] }; // lastName

        ICsvListReader listReader = null;
        try {
                listReader = new CsvListReader(new FileReader(VARIABLE_CSV_FILENAME), CsvPreference.STANDARD_PREFERENCE);

                listReader.getHeader(true); // skip the header (can't be used with CsvListReader)

                while( (listReader.read()) != null ) {

                        // use different processors depending on the number of columns
                        final CellProcessor[] processors;
                        if( listReader.length() == noBirthDateProcessors.length ) {
                                processors = noBirthDateProcessors;
                        } else {
                                processors = allProcessors;
                        }

                        final List<Object> customerList = listReader.executeProcessors(processors);
                        System.out.println(String.format("lineNo=%s, rowNo=%s, columns=%s, customerList=%s",
                                listReader.getLineNumber(), listReader.getRowNumber(), customerList.size(), customerList));
                }

        }
        finally {
                if( listReader != null ) {
                        listReader.close();
                }
        }
}

另外,如果可选列不在末尾而是在中心或其他地方怎么办?


因此,这里真正的问题是,要应用正确的单元处理器,您需要知道每列中有哪些数据。对于有效的 CSV 文件(每行的列数相同),这不是问题,但如果您正在处理可变列 CSV 文件,那就很棘手了。

如果像示例一样,只有 1 列是可选的,那么您只需计算读取的列数并使用适当的单元处理器阵列。没关系where该可选列是,因为它仍然是可预测的。

但是,如果多于 1 列是可选的,那么您就会遇到麻烦。例如,如果middleName and city在以下 CSV 文件中是可选的:

firstName,middleName,lastName,city
Philip,Fry,New York

可以理解为:

firstName="Philip", middleName="Fry", lastName="New York", city=null

or

firstName="Philip", middleName=null, lastName="Fry", city="New York"

这已经不再是可预测的了。您可以检查列中的数据以确定该列应代表什么(例如日期有/'s),但这不是很稳健,即使如此,您甚至可能需要阅读几行才能弄清楚。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 SuperCsv 与多个变量列结合使用 的相关文章

随机推荐

  • SQL MAX(DATE) 订单号

    我有以下查询 SELECT o ClientId o MAX Date o OrderNumber FROM dbo tblOrders GROUP BY o ClientId o OrderNumber 这仍然给我所有订单号 我如何才能只
  • 如何使用 Javascript 在 Google Map v3 中使用 GTFS feed?

    我第一次尝试将 GTFS 通用交通源规范 与 Google 地图结合使用 根据 Google 开发人员页面 我已经了解了用作源的 txt 文件的概念 为了制作演示 我从以下位置下载了一个交通 zip 文件谷歌开发者页面 但我不知道如何使用这
  • 如何在 .htaccess 文件中编写 if - elseif - else if 条件块?

    这就是我想用伪代码完成的事情 if server host equals productionsite com then RewriteBase else if server host equals stagingsite com then
  • Python装饰类

    我正在尝试装饰一个class有参数但无法让它工作 这是装饰器 def message param1 param2 def get message func func init param1 param2 return get message
  • spring 添加默认值到 form:select

    我正在开发一个 Spring 应用程序 现在我使用以下方法向我的 jsp 页面之一添加了一个下拉列表
  • jQuery 将类添加到特定的 div

    我有一段代码正在读取购物篮中有多少商品 我想向 ID 为 basket count 的 div 添加一个类 我知道如何在出现计数器的情况下将类添加到 span 标记 不知道如何从这里开始 任何帮助将不胜感激 span ctl00 lblIt
  • 更改java中的输入语言

    我的申请是希伯来语的 运行我的应用程序的计算机都将英语设置为默认语言 将希伯来语设置为第二语言 每次他们需要向我的 JTextFields 输入内容时 他们都必须 alt shift 来更改语言 他们中的一些人甚至不看显示器就开始写 我得到
  • Office Open XML 项目符号列表

    我正在尝试创建一个 Office 打开的 xml 文档 其中包含项目符号列表 但该文档没有显示项目符号 而是显示了编号列表 这就是我寻找的 第 1 款 第 2 段 相反 我得到以下列表 第 1 款 第 2 段 我已经深入挖掘了网络并用谷歌搜
  • 在 android java 类中使用 Kotlin 扩展

    是否可以在 android java 类中使用 kotlin 扩展 例子 fun String getSomething String return something 然后在Java中像这样使用它 String someString bl
  • 桌面通知不允许在 Chrome 上运行

    所以我希望我的网页在加载时提示对桌面通知进行验证 所以我在body中添加了onload 这在 mozilla firefox 上工作得很好 但在 Google chrome 中它不会显示问题 但如果我像这样调用该函数 它就会起作用 a hr
  • 当有足够可用内存时 CUDA 内存不足

    I m having trouble with using Pytorch and CUDA Sometimes it works fine other times it tells me RuntimeError CUDA out of
  • 如何在没有应用程序默认凭据或 Cloud SDK 的情况下对 Google Cloud API 进行身份验证?

    我正在尝试从 AWS Lambda 函数访问 Google Cloud API 但我不知道如何进行身份验证 Google Cloud 文档中的身份验证指南 https cloud google com docs authentication
  • 加快excel格式化vba代码的速度?

    我正在使用以下 vba 代码将文本字符串日期更改为 Excel 中的实际日期 以便我可以将其用于逻辑比较等 问题是我需要这个来处理大约 4000 行并每周更新一次 而且这个代码非常慢 Sub Datechange Dim c As Rang
  • Spring Data Elasticsearch 批量索引/删除 - 数百万条记录

    我正在使用 Spring Data Elasticsearch 4 2 5 我们有一项工作对特定的数据库表执行 ETL 提取 转换和加载数据 我在作业运行时使用 Elasticsearch 为这些数据建立索引 数据将达到数百万条甚至更多 目
  • html 5 可以提供实时媒体流吗?

    我听说过 html 5 有很多有趣的功能 但它能够提供来自网络摄像头的实时媒体流吗 本身不是 html5 但 html5 视频可以读取流 例如 YouTube 上的实时流媒体 通过 HTML5 中的 RTSP 或 RTP 进行流式传输 ht
  • 在 Coldfusion 中使用 Apache Cassandra

    我正在尝试在使用 Coldfusion 编码的项目中使用 Apache Cassandra 由于 Coldfusion 没有适用于 Apache Cassandra 的驱动程序 反之亦然 因此我尝试使用 Cassandra 的 Java 驱
  • 如何从反应本机代码转到特定的本机视图控制器?

    我是反应原生的新手 我正在将 React Native 中的一项功能添加到现有的 Swift 应用程序中 我提出了RCTRootview来自我的本机视图控制器 从那里 当用户单击后退按钮时 我必须转到用 swift 编写的主页 如何从反应本
  • 如何在 Web 应用程序中管理时区?

    我不想在我的网络应用程序中管理用户的不同时区 但我不知道从哪里开始 我必须在数据库中保存每个用户的本地时间 或者可能将其转换为 UTC 时间 保存 然后再次进行转换以显示它 或者还有其他方法吗 例如 如果我的一个用户在他的当地时间进行预约
  • ImageSourceConverter 抛出 NullReferenceException ...为什么?

    在过去一个小时左右的时间里 我一直在为这个问题绞尽脑汁 我有一些代码是这样的 videoTile Icon new ImageSourceConverter ConvertFrom coDrivr4 Properties Resources
  • 将 SuperCsv 与多个变量列结合使用

    我正在查看 Super CSV 中的这个示例website http supercsv sourceforge net examples reading variable cols html这表明 dateofbirth 是可选列 如果我有