从csv生成树结构

And*_*dez 6 java csv algorithm grouping parsing

我现在已经对这个问题摸不着头脑了.我基本上试图从一组CSV数据生成树层次结构.CSV数据不一定是有序的.这就像是如下:

Header: Record1,Record2,Value1,Value2
Row: A,XX,22,33
Row: A,XX,777,888
Row: A,YY,33,11
Row: B,XX,12,0
Row: A,YY,13,23
Row: B,YY,44,98
Run Code Online (Sandbox Code Playgroud)

我试图尽可能灵活地进行分组.最简单的分组是为Record1和Record2做的,Value1和Value2存储在Record2下,这样我们得到以下输出:

Record1
    Record2
        Value1 Value2
Run Code Online (Sandbox Code Playgroud)

这将是:

A
    XX
        22,33
        777,888
    YY
        33,11
        13,23
B
    XX
        12,0
    YY
        44,98 
Run Code Online (Sandbox Code Playgroud)

我目前正将我的群组设置存储在列表中 - 我不知道这是否会妨碍我的想法.此列表包含组的层次结构,例如:

Record1 (SchemaGroup)
    .column = Record1
    .columns = null
    .childGroups =
        Record2 (SchemaGroup)
            .column = Record1
            .columns = Value1 (CSVColumnInformation), Value2 (CSVColumnInformation)
            .childGroups = null
Run Code Online (Sandbox Code Playgroud)

此代码如下所示:

private class SchemaGroup {
    private SchemaGroupType type = SchemaGroupType.StaticText;  // default to text
    private String text;
    private CSVColumnInformation column = null;
    private List<SchemaGroup> childGroups = new ArrayList<SchemaGroup>();
    private List<CSVColumnInformation> columns = new ArrayList<CSVColumnInformation>();
}


private enum SchemaGroupType {
    /** Allow fixed text groups to be added */
    StaticText,
    /** Related to a column with common value */
    ColumnGroup
}
Run Code Online (Sandbox Code Playgroud)

我正在为此制作一个算法,试图考虑使用的底层结构.目前我使用自己的包装类从上到下解析CSV:

CSVParser csv = new CSVParser(content);
String[] line;
while((line = csv.readLine()) != null ) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我只是想开始我的编码大脑.

有什么想法吗?

lur*_*ker 0

根据这个问题的提出方式,我会执行以下操作:

  1. 定义包含树的最终数据结构。
  2. 为原始文本中的每一行定义一个表示(为了灵活性可能是一个链接列表)
  3. 编写一个方法,获取表示的行并将其插入到树数据结构中。对于每个不存在的分支,创建它;对于每个现有分支,当您逐步浏览“行”链接列表结构时,遍历它。
  4. 从一棵空树开始。
  5. 将文件的每一行读入行项结构并调用步骤 3 中定义的方法。

这有帮助吗?