【问题标题】:what is the best way to edit csv file编辑csv文件的最佳方法是什么
【发布时间】:2010-06-24 14:17:54
【问题描述】:

我有一个不完整的 csv 文件需要准确更新,所以有这样的 csv 文件:

one,two,three,four,five,six,seven,eight,nine,ten //This is a line(String)

当然,该文件要复杂得多,但在这种格式下,这是我想做的插入 new-word,new-word1, new-word3 或七到八(或任何范围)之间的 n 个单词。我怎样才能做到这一点?

伪代码、代码或示例会很棒,我什至不知道如何开始。

更新:

也许我应该将其转换为数组或某种数据结构。然后在特定位置插入新项目,将其余内容向右移动并为每次插入执行此操作。

我不知道是否是正确的方法或如何开始编程

更新二:

可能在列表中读取 csv,将列表拆分为两个列表,第一个以 7 结尾。然后将 n 个单词添加到第一个列表并在最后加入两个列表?也不知道怎么编程这个

【问题讨论】:

    标签: java csv


    【解决方案1】:

    看看OpenCSV

    更新:这里有一些(几乎没有)伪代码,可以大致了解您将如何使用 OpenCSV:

    CSVReader reader = new CSVReader(new FileReader("old.csv"));
    CSVWriter writer = new CSVWriter(new FileWriter("new.csv"));
    String [] nextLine;
    while ((nextLine = reader.readNext()) != null) {
        List<String> lineAsList = new ArrayList<String>(Arrays.asList(nextLine));
        // Add stuff using linesAsList.add(index, newValue) as many times as you need.
        writer.writeNext(lineAsList.toArray());
    }
    

    提示:@Mark Peters 指出您无法更新 Arrays.asList 的结果

    【讨论】:

    • @Hank Gay 我要么不明白您发布的内容,要么将您现有的条目写入新文件,我在这里看不到如何在项目之间写入
    • OpenCSV 会正确转义双引号吗?
    • @Joe Phillips 我想这取决于您对正确的定义,因为没有规范。这是一个简单的库;我建议您尝试一下并阅读FAQ on its homepage
    • 只想注意 Arrays.asList 是一个不可修改的集合。你想要new ArrayList(Arrays.asList(nextLine))
    • 上次我使用这个库时,它很消耗内存(如果你必须处理大约 15 gb 大小的文件,那么不需要大量内存是非常重要的;我必须在 OpenCSV 中对其进行优化)
    【解决方案2】:

    这个伪类代码可能会有所帮助:

    List values = Arrays.asList(line.split(",\s*"));
    List newWords = Arrays.aList(newWordsLine.split(",\s*"));
    
    values.addAll(7,newWords);
    
    StringBuffer buf = new StringBuffer(values.get(0));
    for(v : values.subList(1,values.size()) {
        buf.append(",",v);
    }
    return buf.toString();
    

    这将在该行的第 7 项之后插入 newWords

    【讨论】:

      【解决方案3】:

      我会将其解析为一个集合,添加您的项目,然后将其渲染回 csv。

      【讨论】:

      • 是的,你如何将 n 项插入到任何集合中,例如:数组列表中已经存在的两个项目之间
      • 您会在要插入之前找到对象,获取它的索引,然后将三个东西插入那里?
      • 对于 ArrayList,使用add(int, object) 方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多