如何提取具有特定 header 名称的 CSV 列并输出到新文件?
How to extract CSV columns with the specific header names and output to a new file?
如果我有文件。里面的内容是这样的:
ID,Name,Gender,Age,Enabled
1,Kevin,M,1,true
2,James,M,2,true
3,Jane,F,3,true
4,Jenny,F,4,true
现在我想提取列:ID、姓名、性别并将它们输出到一个新文件如下:
ID,Name,Age
1,Kevin,1
2,James,2
3,Jane,3
4,Jenny,4
我想根据 header 名称而不是索引号提取列。
我想使用 OpenCSV。
如何实现?
CSVReader 中没有使用列名读取值的内置方法。
但是您可以通过创建另一种方法来获得正确的列位置来解决以下问题。
private int getPositionUsingName(String[] allColumnNames, String columnName) {
return Arrays.asList(allColumnNames).indexOf(columnName);
}
所以你的方法将是这样的:
CSVReader csvReader = new CSVReader(new FileReader("inputFile.csv"));
String [] allColumnNames;
String [] nextLine;
int idPosition;
int namePosition;
int agePosition;
allColumnNames = csvReader.readNext();
idPosition = getPositionUsingName(allColumnNames, "ID");
namePosition = getPositionUsingName(allColumnNames, "Name");
agePosition = getPositionUsingName(allColumnNames, "Age");
while ((nextLine = csvReader.readNext()) != null) {
System.out.println(nextLine[idPosition]+" "+nextLine[namePosition]+" "+nextLine[agePosition]);
}
如果我有文件。里面的内容是这样的:
ID,Name,Gender,Age,Enabled
1,Kevin,M,1,true
2,James,M,2,true
3,Jane,F,3,true
4,Jenny,F,4,true
现在我想提取列:ID、姓名、性别并将它们输出到一个新文件如下:
ID,Name,Age
1,Kevin,1
2,James,2
3,Jane,3
4,Jenny,4
我想根据 header 名称而不是索引号提取列。
我想使用 OpenCSV。
如何实现?
CSVReader 中没有使用列名读取值的内置方法。 但是您可以通过创建另一种方法来获得正确的列位置来解决以下问题。
private int getPositionUsingName(String[] allColumnNames, String columnName) {
return Arrays.asList(allColumnNames).indexOf(columnName);
}
所以你的方法将是这样的:
CSVReader csvReader = new CSVReader(new FileReader("inputFile.csv"));
String [] allColumnNames;
String [] nextLine;
int idPosition;
int namePosition;
int agePosition;
allColumnNames = csvReader.readNext();
idPosition = getPositionUsingName(allColumnNames, "ID");
namePosition = getPositionUsingName(allColumnNames, "Name");
agePosition = getPositionUsingName(allColumnNames, "Age");
while ((nextLine = csvReader.readNext()) != null) {
System.out.println(nextLine[idPosition]+" "+nextLine[namePosition]+" "+nextLine[agePosition]);
}