处理具有非标准内容的CSV文件

用户名

我有一个包含非标准内容的CSV文件,它的内容如下:

John, 001
01/01/2015, hamburger
02/01/2015, pizza
03/01/2015, ice cream
Mary, 002
01/01/2015, hamburger
02/01/2015, pizza
John, 003
04/01/2015, chocolate

现在,我想做的是用Java编写一个逻辑来分隔它们。我希望将“ John,001”作为标题,并将所有行放在John之下,再将Mary变成John的行。

这有可能吗?还是应该手动进行?

编辑:
对于输入,即使它不是标准化的,一个值得注意的模式是没有名称的行将始终以日期开头。
我的输出目标将是一个Java对象,最终可以将其以以下格式存储在数据库中。

Name, hamburger, pizza, ice cream, chocolate
John, 01/01/2015, 02/01/2015, 03/01/2015, NA
Mary, 01/01/2015, 02/01/2015, NA, NA
John, NA, NA, NA, 04/01/2015
蒂莫·汉尼斯(Timo Hanisch)

您可以将文件读入列表

List<String> lines = Files.readAllLines(Paths.get(path), StandardCharsets.UTF_8);

然后遍历该列表,并将其拆分为所需的分隔符(",")

现在,您可以只使用if-else或switch块来检查特定条目。

List<DataObject> objects = new ArrayList<>();
DataObject dataObject = null;
for(String s : lines) {
    String [] splitLine = s.split(",");
    if(splitLine[0].matches("(\d{2}\/){2}\d{4}")) {
        // We found a data
        if(dataObject != null && splitLine.length == 2) {
            String date = splitLine[0];
            String dish = splitLine[1];
            dataObject.add(date, dish);
        } else {
            // Handle error
        }
    } else if(splitLine.length == 2) {
        // We can create a new data object
        if(dataObject != null) {
            objects.add(dataObject);
        }
        String name = splitLine[0];
        String id = splitLine[1];
        dataObject = new DataObject(name, id);
    } else {
        // Handle error
    }
}

现在,您可以将它们分类为您的特定类别。

编辑:更改了循环,并添加了一个正则表达式(可能不是最佳的)来匹配日期字符串,并使用它们来决定是否将它们添加到最后一个数据对象中。

DataObject类可以包含保存日期/菜肴的数据结构。解析CSV后,您可以遍历对象List并执行所需的任何操作。我希望这个答案有帮助:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有非标准fmt标题的WAVE文件

删除具有非标准文件名的文件列表

读取带有非标准行分隔符的 csv 文件时出错

读取带有非标准时间戳列的大型CSV文件

Vim和Syntastic具有非标准的HTML标签

调用具有非标准密钥长度的CryptoJS.AES.encrypt / decrypt时,如何处理AES密钥?

使用cfwheels,coldfusion和cfspreadsheet创建具有非标准列名(带空格)的Excel文件导出

AWS Athena:具有非标准文件结构的 S3 存储桶的分区表

非标准目录中的.desktop文件

如何为Weka标准化此非标准CSV文件?

您如何读取、处理和写入非标准格式的 xml 内容

如何对压缩的非标准文本文件的内容进行 grep

具有带有非标准编号的父子关系的枚举表

如何使用python或scala将非标准的csv文件读入数据框

R中具有mapply的子集参数的非标准评估

在旧版本上具有非标准makefile名称的递归make

检索非标准化表中的列具有不同值的行

从具有非标准结构的字符串中提取日期

使用具有非标准主键列的迁移来添加参考列

Gos中具有非标准字段的结构数组上的MarshalJSON

提交具有非标准POST数据格式的表单

具有非标准布局的Git-SVN迁移不显示合并

如何使用simplexml解析xml-具有空格和非标准格式的节点

gdb:print无法识别具有非标准名称或字符的变量?

浏览器如何处理非标准标签?

设置 Azure Front Door 来处理非标准端口

如何处理非标准的Json日期

机械化处理非标准401接头

使用非标准格式的类型在Spark中加载CSV