gpt4 book ai didi

java - 合并两个具有不同标题的csv文件

转载 作者:行者123 更新时间:2023-12-02 12:06:19 25 4
gpt4 key购买 nike

我需要根据各自的部分合并两个具有相似标题但数据不同的 CSV 文件中的数据。 CSV 文件将包含两部分,第一部分包含按部门划分的数据,第二部分包含住宅区的数据。这是我的第一个 CSV 文件

Sector,Total Number of Occurrence 
sector1,12
sector2,30
sector3,100

House,Total Number of Occurrence
B12,80
A2,87


我的第二个 CSV 文件

Sector,Total Number of Occurrence 
sector 99,89
sector 11,9

House,Total Number of Occurrence
Q11,22
Q22,67

我希望生成一个包含这两种数据的 CSV 文件,但数据必须分配到正确的部分,如下所示

Sector,Total Number of Occurrence 
sector1,12
sector2,30
sector3,100
sector 99,89
sector 11,9

House,Total Number of Occurrence
B12,80
A2,87
Q11,22
Q22,67


但我想用我当前开发的源代码,它无法做到这一点,因为它包含 CSV 中列出的第二个 header ,即 House,Total Number of Occurrence。我可以知道如何达到我想要的输出吗?这就是我当前的 csv 输出的样子

Sector,Total Number of Occurrence 
sector1,12
sector2,30
sector3,100

House,Total Number of Occurrence
B12,80
A2,87
sector 99,89
sector 11,9

House,Total Number of Occurrence
B12,80
A2,87


这是我目前开发的源码

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class SummarizeReport1
{
static ArrayList<String> list1 = new ArrayList<>();
static String line1;
public static void main(String[] args) throws IOException
{
List<Path> paths = Arrays.asList(Paths.get("C:\\Users\\user\\Desktop\\file\\log\\backup\\report12017-10-31.csv"), Paths.get("C:\\Users\\user\\Desktop\\file\\log\\backup\\report12017-10-31 - Copy.csv"));
List<String> mergedLines = getMergedLines(paths);
Path target = Paths.get("C:\\Users\\user\\Desktop\\file\\log\\backup\\SummarizedReport1.csv");
Files.write(target, mergedLines, Charset.forName("UTF-8"));
}

private static List<String> getMergedLines(List<Path> paths) throws IOException
{
List<String> mergedLines = new ArrayList<> ();
for (Path p : paths)
{
List<String> lines = Files.readAllLines(p, Charset.forName("UTF-8"));
if (!lines.isEmpty()) {
if (mergedLines.isEmpty()) {
mergedLines.add(lines.get(0)); //add header only once
}
mergedLines.addAll(lines.subList(1, lines.size()));
}
}
return mergedLines;
}
}

最佳答案

首先,创建一个类来存储标题和每一行。

public class SubFile{
private String headers;
private List<String> lines
}

然后,逐行读取文件。对于第一行,只需创建一个带有 header 的新 SubFile 实例。接下来的每一行,将它们添加到此实例中 (addLine)。

您需要存储多个“子”csv,因此使用Collection,在这里,我将使用List,因为为什么不......

List<SubFile> files;

每次读取 header (第一行或空行之后)时,您都需要检查该 header 是否与 Collection 中的实例匹配以继续添加到其中,或者创建一个实例.

public SubFile getInstance(String headerLine){
/*
instance = search instance in collection
if (instance not found)
create instance
add it to the list
return instance
*/
}

我相信这实现起来非常简单,所以我会让你先尝试一下,你有可以使用的算法。

关于java - 合并两个具有不同标题的csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46888265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com