1. ホーム
  2. ジャワ

Java による木構造データの処理、csv ファイルの操作

2022-03-01 09:26:36
<パス

CSVファイル入門

カンマ区切り値、略してCSVは、データを保存するために使われるプレーンテキスト形式である。CSVファイルとは、コンピュータのデータファイルの一つで、カンマで区切られたリストを整理するためのもので、試用に使われます。これは、リレーショナルデータベースプログラムとスプレッドシートプログラムのような2つの異なるコンピュータプログラム間で表形式のデータを移動するためによく使用されます。メモ帳で新しいファイルを作成し、接尾辞を変更することをお勧めします。また、メモ帳でCSVファイルを開くことをお勧めします。Excelで開くとエラーが報告されることがあります。

要求事項の説明

図1 データ
図2 ツリー構造図

図3 加工後の樹木

これで、ツリーには3, 6, 10, 12, 14, 15の6つのノードしかなくなりました。その関係は次のようになる。

3 - 10

6--3

10--0

12--10

14--10

15--14
図4のように、オリジナルのフォーマットでデータを出力する。

1. 図1のC列とI列のデータをもとにツリーを構築せよ。
2. 各ノード固有の値には、少なくともH列の0と1のデータが含まれる。
3. ツリー内の0ノードのデータを削除します。0ノードがリーフノードであれば、直接削除することができる。ノード0が非リーフノードで、その子孫ノードにノード1がある場合は、ノード0を削除した後、その親ノードにノード1、その子孫ノードにノード1を接続します。
要するに、ツリー内の0ノードをすべて削除し、0ノードの上下にある1ノードを接続することが要求されているのです。1ノードのみを含むツリーを構築する。
treelibの中のmove_node関数に似ています。

コードの実装

public class TreeNode {
	String lan;
    String sen;
    String deptID;
    String dep;
    String dep_orig;
    String dep_POS1;
    String dep_POS2;
    String xushi_1;
    String he_ID;
    String he;
    String he_orig;
    String he_POS1;
    String he_POS2;
    String xushi_2;
    String type;
    boolean visited;
    boolean saved;
    ... ...get/set methods are omitted
}

public class TreeTest {
	public static void main(String src[]){
        try{
        	//create the output file header csv default encoding gbk
            BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d://result.csv",true), "GBK"));
            out.write("lan,sen,depID,dep,dep_orig,dep_POS1,dep_POS2,xushi,he_ID,he,he_orig,he_POS1,he_POS2,xushi,type");
            out.newLine();
            out.flush();
            out.close();
        }
        catch (Exception e){

        }

        //read csv file
        List<List
> trees = new ArrayList<List
>();
        try {
            BufferedReader reader = new BufferedReader(new FileReader("d://aa.csv"));//change to your filename
            reader.readLine();//read the first line of information, the title information. Comment out if needed
            String line = null;
            List
 tree = new ArrayList
();
            while((line=reader.readLine())! =null){
                String item[] = line.split(",");//CSV format file is a comma-separated file, here according to the comma cut
                try{
                    String child = item[2];
                    if(child.equals("EOS"){//end with EOS
                        trees.add(tree);
                        tree = new ArrayList
();
                    }
                    String parent = item[8];//this is the data you want
                    TreeNode info = new TreeNode();
                    info.setLan(item[0]);
                    info.setSen(item[1]);
                    info.setDeptID(item[2]);
                    info.setDep(item[3]);
                    info.setDep_orig(item[4]);
                    info.setDep_POS1(item[5]);
                    info.setDep_POS2(item[6]);
                    info.setXushi_1(item[7]);
                    info.setHe_ID(item[8]);
                    info.setHe(item[9]);
                    info.setHe_orig(item[10]);
                    info.setHe_POS1(item[11]);
                    info.setHe_POS2(item[12]);
                    info.setXushi_2(item[13]);
                    info.setType(item[14]);
                    info.setVisited(false);
                    tree.add(info);
                }catch (Exception e0){// When reading the last line, an error is reported because there are only two values. Go to catch and read the last row in catch
                    try{
                        TreeNode info = new TreeNode();
                        info.setLan(item[0]);
                        info.setSen(item[1]);
                        info.setDeptID(item[2]);
                        info.setVisited(false);
                        tree.add(info);
                    }catch(Exception e){
                    	e.printStackTrace();
                    }

                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        //write to csv file
        for(List
 tree: trees){
            // look up the location of node 0
            // root node
            TreeNode root = new TreeNode();
            root.setDeptID("0");
            Stack

 stacks = new Stack
();
            while(root!=null){
                try{
                    TreeNode child = root;
                    List
 childs = tree.stream().filter(item -> item.getHe_ID().equals(child.getDeptID()) && !item.isVisited()).collect(Collectors. toList());
                    if(childs.size()==0){
                        root =stacks.pop();
                        TreeNode pop= root;
                        // System.out.println(root.getDeptID() + "out of stack");
                        // Out of stack behavior:
                        // whether it is a leaf node
                        List
 boys = tree.stream().filter(item -> item.getHe_ID().equals(pop.getDeptID())).collect(Collectors.toList());
                        // leaf nodes
                        if(boys.size()==0){
                            if(pop.getXushi_1().equals("1"){
                                pop.setSaved(true);
                            }else{
                                // just throw away
                                pop.setSaved(false);
                            }
                        }
                        // branch point
                        else{
                            if(pop.getXushi_1().equals("1"){
                                pop.setSaved(true);
                            }else{
                                // Throw you away
                                pop.setSaved(false);
                                // and pass your father to the children
                                // kill and kill
                                for(TreeNode boy:boys){
                                    if(boy.getXushi_1().equals("1"){
                                        boy.setHe_ID(pop.getHe_ID());
                                    }
                                }
                            }
                        }
                        continue;
                    }
                    for(TreeNode node : childs){
                        if(!node.isVisited()){
                            node.setVisited(true);
                            stacks.push(node);
                        }

                    }
                    root = stacks.lastElement();
                }catch(Exception e){
                    List
 childs = tree.stream().filter(item -> item.isSaved()).collect(Collectors.toList());
                    try {
                        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d://result.csv",true), "GBK"));
                        for (TreeNode child : childs) {
                            System.out.println(child.toString());
                            String value = child.getLan();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getSen();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getDeptID();
                
                            }
                            value = child.getDep_POS1();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getDep_POS2();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getXushi_1();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getHe_ID();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getHe();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getHe_orig();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getHe_POS1();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getHe_POS2();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getXushi_2();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value =

public class TreeTest {
	public static void main(String src[]){
        try{
        	//create the output file header csv default encoding gbk
            BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d://result.csv",true), "GBK"));
            out.write("lan,sen,depID,dep,dep_orig,dep_POS1,dep_POS2,xushi,he_ID,he,he_orig,he_POS1,he_POS2,xushi,type");
            out.newLine();
            out.flush();
            out.close();
        }
        catch (Exception e){

        }

        //read csv file
        List<List
> trees = new ArrayList<List
>();
        try {
            BufferedReader reader = new BufferedReader(new FileReader("d://aa.csv"));//change to your filename
            reader.readLine();//read the first line of information, the title information. Comment out if needed
            String line = null;
            List
 tree = new ArrayList
();
            while((line=reader.readLine())! =null){
                String item[] = line.split(",");//CSV format file is a comma-separated file, here according to the comma cut
                try{
                    String child = item[2];
                    if(child.equals("EOS"){//end with EOS
                        trees.add(tree);
                        tree = new ArrayList
();
                    }
                    String parent = item[8];//this is the data you want
                    TreeNode info = new TreeNode();
                    info.setLan(item[0]);
                    info.setSen(item[1]);
                    info.setDeptID(item[2]);
                    info.setDep(item[3]);
                    info.setDep_orig(item[4]);
                    info.setDep_POS1(item[5]);
                    info.setDep_POS2(item[6]);
                    info.setXushi_1(item[7]);
                    info.setHe_ID(item[8]);
                    info.setHe(item[9]);
                    info.setHe_orig(item[10]);
                    info.setHe_POS1(item[11]);
                    info.setHe_POS2(item[12]);
                    info.setXushi_2(item[13]);
                    info.setType(item[14]);
                    info.setVisited(false);
                    tree.add(info);
                }catch (Exception e0){// When reading the last line, an error is reported because there are only two values. Go to catch and read the last row in catch
                    try{
                        TreeNode info = new TreeNode();
                        info.setLan(item[0]);
                        info.setSen(item[1]);
                        info.setDeptID(item[2]);
                        info.setVisited(false);
                        tree.add(info);
                    }catch(Exception e){
                    	e.printStackTrace();
                    }

                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        //write to csv file
        for(List
 tree: trees){
            // look up the location of node 0
            // root node
            TreeNode root = new TreeNode();
            root.setDeptID("0");
            Stack

 stacks = new Stack
();
            while(root!=null){
                try{
                    TreeNode child = root;
                    List
 childs = tree.stream().filter(item -> item.getHe_ID().equals(child.getDeptID()) && !item.isVisited()).collect(Collectors. toList());
                    if(childs.size()==0){
                        root =stacks.pop();
                        TreeNode pop= root;
                        // System.out.println(root.getDeptID() + "out of stack");
                        // Out of stack behavior:
                        // whether it is a leaf node
                        List
 boys = tree.stream().filter(item -> item.getHe_ID().equals(pop.getDeptID())).collect(Collectors.toList());
                        // leaf nodes
                        if(boys.size()==0){
                            if(pop.getXushi_1().equals("1"){
                                pop.setSaved(true);
                            }else{
                                // just throw away
                                pop.setSaved(false);
                            }
                        }
                        // branch point
                        else{
                            if(pop.getXushi_1().equals("1"){
                                pop.setSaved(true);
                            }else{
                                // Throw you away
                                pop.setSaved(false);
                                // and pass your father to the children
                                // kill and kill
                                for(TreeNode boy:boys){
                                    if(boy.getXushi_1().equals("1"){
                                        boy.setHe_ID(pop.getHe_ID());
                                    }
                                }
                            }
                        }
                        continue;
                    }
                    for(TreeNode node : childs){
                        if(!node.isVisited()){
                            node.setVisited(true);
                            stacks.push(node);
                        }

                    }
                    root = stacks.lastElement();
                }catch(Exception e){
                    List
 childs = tree.stream().filter(item -> item.isSaved()).collect(Collectors.toList());
                    try {
                        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d://result.csv",true), "GBK"));
                        for (TreeNode child : childs) {
                            System.out.println(child.toString());
                            String value = child.getLan();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getSen();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getDeptID();
                
                            }
                            value = child.getDep_POS1();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getDep_POS2();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getXushi_1();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getHe_ID();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getHe();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getHe_orig();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getHe_POS1();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getHe_POS2();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getXushi_2();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value =