CSV文件简介

Comma Separated Values,简称CSV,即逗号分隔值,是一种纯文本格式,用来存储数据。在CSV中,数据的字段由逗号分开。CSV文件是一个计算机数据文件用于执行审判和真正的组织工具,逗号分隔的清单。常常被用于移动表格数据之间的两个不同的计算机程序,例如关系数据库程序和电子表格程序。建议用记事本新建一个文件然后修改后缀名,也建议用记事本打开CSV文件。用Excel打开,有时候会报错。

要求说明

图1 数据

Java生成CSV文件逗号转义 java对csv文件中的数据处理_List


图2 树结构图

Java生成CSV文件逗号转义 java对csv文件中的数据处理_List_02


图3 处理后的树

Java生成CSV文件逗号转义 java对csv文件中的数据处理_List_03


现在树只有3、6、10、12、14、15六个节点。关系如下:

3——10

6——3

10——0

12——10

14——10

15——14

按照原始格式输出数据,如图4。

Java生成CSV文件逗号转义 java对csv文件中的数据处理_List_04


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方法省略
}
public class TreeTest {
	public static void main(String src[]){
        try{
        	//创建输出文件的头部    csv默认编码方式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){

        }

        //读取csv文件
        List<List<TreeNode>> trees = new ArrayList<List<TreeNode>>();
        try {
            BufferedReader reader = new BufferedReader(new FileReader("d://aa.csv"));//换成你的文件名
            reader.readLine();//读取第一行信息,标题信息。如果需要,则注释掉
            String line = null;
            List<TreeNode> tree = new ArrayList<TreeNode>();
            while((line=reader.readLine())!=null){
                String item[] = line.split(",");//CSV格式文件为逗号分隔符文件,这里根据逗号切分
                try{
                    String child = item[2];
                    if(child.equals("EOS")){//以EOS结束
                        trees.add(tree);
                        tree = new ArrayList<TreeNode>();
                    }
                    String parent = item[8];//这就是你要的数据了
                    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){//当读到最后一行的时候,由于只有两项值,所以会报错。进入catch中,在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();
        }
        //写入csv文件
        for(List<TreeNode> tree: trees){
            // 查询 0节点的位置所在
            // 根节点
            TreeNode root = new TreeNode();
            root.setDeptID("0");
            Stack<TreeNode> stacks = new Stack<TreeNode>();
            while(root!=null){
                try{
                    TreeNode child = root;
                    List<TreeNode> 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()+"出栈");
                        // 出栈行为:
                        // 是否是叶节点
                        List<TreeNode> boys = tree.stream().filter(item -> item.getHe_ID().equals(pop.getDeptID())).collect(Collectors.toList());
                        // 叶节点
                        if(boys.size()==0){
                            if(pop.getXushi_1().equals("1")){
                                pop.setSaved(true);
                            }else{
                                // 直接扔掉
                                pop.setSaved(false);
                            }
                        }
                        // 枝节点
                        else{
                            if(pop.getXushi_1().equals("1")){
                                pop.setSaved(true);
                            }else{
                                // 把你扔掉
                                pop.setSaved(false);
                                // 并且将你的父亲传递给子代
                                // 杀人诛心
                                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<TreeNode> 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();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getDep();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            value = child.getDep_orig();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            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 = child.getType();
                            if(value!=null){
                                out.write(value);
                                out.write(",");
                            }
                            else{
                                out.newLine();
                                continue;
                            }
                            out.newLine();
                        }
                        out.write(childs.get(0).getLan()+","+childs.get(0).getSen()+",EOS");
                        out.newLine();
                        out.flush();
                        out.close();
                    }
                    catch (Exception e0) {

                        System.out.println(e0);
                    }
                    break;
                }
            }
            System.out.println("-------------------------");
        }
    }
}