我将在下面详细说明我的要求。 我将自动化手动过程。我将使用java从远程位置读取多个CSV文件。
预计有五种格式的输入文件,每种格式的标题结构都不同。 例如, 类型1 - 号码,ID,姓名,电话,地址
类型2 - 号码,GID,员工姓名,地址1,地址2,电话号码
所以其他三种类型也不同。
前提条件不是特定运行所需的所有文件。我需要逐个阅读这些文件,验证它,记录验证错误,我必须整合 所有文件中的所有正确数据都以标准输出格式存储在一个文件中 标准输出格式如,
号码,名称,ID,地址
我需要在输出文件中单独使用上述数据,其余数据可以忽略。
我试过的如下, 我创建了5个代表每个类型标题的bean类。我只是阅读一个输入,识别它的类型并解析它。我逐行解析。
public String[] parseCSV(String inputLine){
try {
String[] fields;
Pattern p =
Pattern.compile(",(?=([^\"]*\"[^\"]*\")*(?![^\"]*\"))");
fields = p.split(inputLine);
/*for ( int i = 0; i < fields.length; i++ ) {
System.out.println(fields[i]);
}*/
return fields;
}
我已根据验证规则进行了验证,并且我将每个行元素附加到对象中。我已将所有对象添加到MAP集合中。 同样,我已经创建了5个bean并且做了同样的事情。
但是,现在需要做的改变是什么。 所有五种类型的名单中的所有标题都是可配置的项目。因此,每当标题结构发生变化时,我都必须更改我的bean类。
我们必须创建一个单独的实用程序,可以为所有五种类型的输入文件配置。 要非常清楚,如果类型1输入带有8列,类型3带有12列,则实用程序可以解析它。
我们将有一个表格,其中包含有关所有五种输入类型的标题结构的数据。 一旦我读取文件并识别其类型,我将点击数据库并读取该特定类型的标题结构及其列数。 我将列数与输入文件的头数相匹配,我将不得不继续在运行时创建一个bean类,具体取决于现在读取的头结构。 我会像上面那样验证和巩固。
要求是, bean类的运行时配置,具体取决于输入的类型
请让我知道您的想法,如果您也分享代码,我将不胜感激。
答案 0 :(得分:0)
我建议您查看Apache commons-csv library。它允许您解析CSV并轻松获取标题行的映射以获取列名称。之后,您可以轻松地执行任何操作,以确定您已打开的CSV类型。