【问题标题】:adding multiple columns to a csv file将多列添加到 csv 文件
【发布时间】:2016-02-16 07:24:53
【问题描述】:

这是我现有的 csv 文件:

userid,name
1,Jim
2,Sally
3,Bob

我可以使用 CsvMapReader/Writer 添加另一列并使其看起来像:

userid,name,time
1,Jim,64913824823208
2,Sally,64913824900056
3,Bob,64913824966956

但是,如果我想添加另一列以使我的 csv 看起来像这样:

userid,name,time,day
1,Jim,64913824823208,Mon
2,Sally,64913824900056,Mon
3,Bob,64913824966956,Mon

我如何做到这一点?

我用来添加列的代码段是:

CsvPreference prefs = CsvPreference.STANDARD_PREFERENCE;
mapReader = new CsvMapReader(new FileReader(path+csvFileName), prefs);
mapWriter = new CsvMapWriter(new FileWriter(path+desiredFileNameWithDateOfPull), prefs);

// header used to read the original file
final String[] readHeader = mapReader.getHeader(true);

// header used to write the new file 
// (same as 'readHeader', but with additional column)
final String[] writeHeader = new String[readHeader.length + 1];
System.arraycopy(readHeader, 0, writeHeader, 0, readHeader.length);
final String str= "day";
writeHeader[writeHeader.length - 1] = str;

mapWriter.writeHeader(writeHeader);
Map<String, String> row;
while( (row = mapReader.read(readHeader)) != null ) {
  // add your column with desired value
  row.put(str, "Mon");
  mapWriter.write(row, writeHeader);
}

【问题讨论】:

  • 我看不出问题出在哪里。您已经能够使用 CsvMapWriter 添加列。要添加另一个,我建议再次执行第 1 步;)。
  • 我试图将第 1 步放在一个循环中。它没有成功。所以我不得不用不同的变量重复代码。对于 3 或 4 列以上的重复代码是可以容忍的。但是,如果我需要再添加 20 或 30 列怎么办?这就是为什么我需要一种方法来循环步骤 1 的过程(只是为了提高效率):)

标签: java supercsv


【解决方案1】:

public static void main(String[] args) 抛出 IOException {

    ICsvMapReader mapReader = null;
    ICsvMapWriter mapWriter = null;
    try {
        CsvPreference prefs = CsvPreference.STANDARD_PREFERENCE;
        mapReader = new CsvMapReader(new FileReader("input.csv"), prefs);
        mapWriter = new CsvMapWriter(new FileWriter("output.csv"), prefs);

        // header used to read the original file
        final String[] readHeader = mapReader.getHeader(true);

        // header used to write the new file 
        // (same as 'readHeader', but with additional column)
        final String[] writeHeader = new String[readHeader.length + 2];
        System.arraycopy(readHeader, 0, writeHeader, 0, readHeader.length);
        final String timeHeader = "time";
        final String str="day";
        writeHeader[writeHeader.length - 2] = timeHeader;
        writeHeader[writeHeader.length-1]= str;

        mapWriter.writeHeader(writeHeader);

        Map<String, String> row;
        while( (row = mapReader.read(readHeader)) != null ) {

            // add your column with desired value
            row.put(timeHeader, String.valueOf(System.nanoTime()));
            row.put(str,"mon");

            mapWriter.write(row, writeHeader);
        }

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

【讨论】:

  • 我做了很多实验,它对我有用。我使用类似的代码将结果值存储在 csv 文件中。希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 2015-08-12
  • 2015-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
相关资源
最近更新 更多