Java による木構造データの処理、csv ファイルの操作
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 =
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例