爱如生国学
登录 | 注册
查看: 2446|回复: 4

[点校] 《春秋左傳》文字編號

[复制链接]
发表于 2010-8-9 05:51:29 | 显示全部楼层 |阅读模式
本人用Java(以Netbeans IDE爲平臺)作了一個類,ZuozhuanCalculator.java,可方便《春秋左傳》文字編號索引工作,如“傳隱元1”中的序數(此例中1卽序數)的計算,很簡陋,現可“半自動”式操作(要問甚麽叫“半自動”, )。
主要爲《春秋左傳》文字研究設計,懂Java且需要的人可用用。
--------------------------------------------------------------------
ZuozhuanCalculator類 使用要求及說明:
       1.作用:統計《左傳》文字,對之進行編號(若要數據庫檢索之類的,還要建DB並另行編程,很艱巨,留待將來);
   2.待處理的《左傳》原文(請自行尋找或自己輸入電腦)需爲無標點的白文(若要保有標點,可自行修改源代碼),存儲格式爲.txt,編碼爲UNICODE(卽UTF-16。要改編碼,可自行修改源代碼),將某公放在一個文件中,每一年之前加“▲”符以資區別(建議經、傳也以“▲”符分開,或放在不同文件中);文字支持Unicode,不支持自造字符,可使用海峰国际标准超大字符集字体支持包;
   3.本人用的IDE爲Netbeans IDE,建議用此IDE編譯運行,或其它支持中文的IDE;
   4.待處理文件路徑和輸出文件路徑分別設定爲“C:\\Documents and Settings\\Administrator\\桌面\\1.txt”及“C:\\Documents and Settings\\Administrator\\桌面\\2. txt”,可按需修改。
   5.此Java類的功能只劃分正文,五字一劃,以“|”分開,並標明每組最後一字的序數,如“三年春齊侯5|伐我北鄙圍10|”;對於六十四卦,因其在《左傳》中僅有補充、演示卦象的作用,故將之看作重文,并在其後標記“☆”及重文序數,如“大有䷍☆1”;某公某年全文末統計正文數,及重文數,如“   □文1881 重0”。
----------------------------------------------------------------------------------------------------------

import java.util.*;import java.io.*;
public class ZuozhuanCalculator {
     static Scanner in=new Scanner(System.in);
public static void main(String args[]) throws IOException{
     String S1="C:\\Documents and Settings\\Administrator\\桌面\\1.txt"; //Input File
     String S2="C:\\Documents and Settings\\Administrator\\桌面\\2.txt";//Output File
     System.out.println("Input File:"+S1+"\nOutput File:"+S2);
     calculate(S1,S2);
}
static void calculate(String path1,String path2) throws FileNotFoundException, IOException{
     InputStreamReader Z = new InputStreamReader(new FileInputStream(path1),"UTF-16");
     BufferedReader ZZ=new BufferedReader(Z);
     BufferedWriter Zuozhuan=new BufferedWriter( new OutputStreamWriter(new FileOutputStream(path2),"UTF-16"));
      String   s=ZZ.readLine();
      char a;long i;int j=0,k;
      Zuozhuan.write("■");
     for(i=0;s!=null;){
       for(k=0;k<s.length();k++) {
         a=s.charAt(k);
         if(a=='▲'&&i!=0) {Zuozhuan.write("   □文"+i+" 重"+j);i=0;j=0;Zuozhuan.write("\n"+"■");}
         else {
         if      (a=='\u4dc0'||a=='\u4dc1'||a=='\u4dc2'||a=='\u4dc3'||a=='\u4dc4'||a=='\u4dc5'||a=='\u4dc6'||a=='\u4dc7'){j++;Zuozhuan.write(a+"☆"+j);}//Yijing Hexagrams Symbols
         else if(a=='\u4dc8'||a=='\u4dc9'||a=='\u4dca'||a=='\u4dcb'||a=='\u4dcc'||a=='\u4dcd'||a=='\u4dce'||a=='\u4dcf'){j++;Zuozhuan.write(a+"☆"+j);}
         else if(a=='\u4dd0'||a=='\u4dd1'||a=='\u4dd2'||a=='\u4dd3'||a=='\u4dd4'||a=='\u4dd5'||a=='\u4dd6'||a=='\u4dd7'){j++;Zuozhuan.write(a+"☆"+j);}
         else if(a=='\u4dd8'||a=='\u4dd9'||a=='\u4dda'||a=='\u4ddb'||a=='\u4ddc'||a=='\u4ddd'||a=='\u4dde'||a=='\u4ddf'){j++;Zuozhuan.write(a+"☆"+j);}
         else if(a=='\u4de0'||a=='\u4de1'||a=='\u4de2'||a=='\u4de3'||a=='\u4de4'||a=='\u4de5'||a=='\u4de6'||a=='\u4de7'){j++;Zuozhuan.write(a+"☆"+j);}
         else if(a=='\u4de8'||a=='\u4de9'||a=='\u4dea'||a=='\u4deb'||a=='\u4dec'||a=='\u4ded'||a=='\u4dee'||a=='\u4def'){j++;Zuozhuan.write(a+"☆"+j);}
         else if(a=='\u4df0'||a=='\u4df1'||a=='\u4df2'||a=='\u4df3'||a=='\u4df4'||a=='\u4df5'||a=='\u4df6'||a=='\u4df7'){j++;Zuozhuan.write(a+"☆"+j);}
         else if(a=='\u4df8'||a=='\u4df9'||a=='\u4dfa'||a=='\u4dfb'||a=='\u4dfc'||a=='\u4dfd'||a=='\u4dfe'||a=='\u4dff'){j++;Zuozhuan.write(a+"☆"+j);}
         else if(a!=' ') {Zuozhuan.write(a);i++;if(i%5==0) Zuozhuan.write(i+"|");}
     }}
     s=ZZ.readLine();
     }
      Zuozhuan.write("   □文"+i+" 重"+j);
      Z.close();
      Zuozhuan.close();
     System.out.println("Finished.");
}
}

[ 本帖最后由 曾伯昧 于 2010-8-9 05:53 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2010-8-9 07:10:31 | 显示全部楼层
經傳混排格式處理(於待處理文件,經文前加“△”符,傳文前加“▲”符):
import java.util.*;import java.io.*;
public class ZuozhuanCalculator {
    static Scanner in=new Scanner(System.in);
public static void main(String args[]) throws IOException{
    String S1="C:\\Documents and Settings\\Administrator\\桌面\\1.txt"; //Input File
    String S2="C:\\Documents and Settings\\Administrator\\桌面\\2.txt";//OutputFile
    System.out.println(" Input File:"+S1+"\nOutput File:"+S2);
    calculate(S1,S2);
}
static void calculate(String path1,String path2) throws FileNotFoundException, IOException{
    InputStreamReader Z = new InputStreamReader(new FileInputStream(path1),"UTF-16");//unicode
    BufferedReader ZZ=new BufferedReader(Z);
    BufferedWriter Zuozhuan=new BufferedWriter( new OutputStreamWriter(new FileOutputStream(path2),"UTF-16"));
     String  s=ZZ.readLine();
     char a=s.charAt(0);long i;int j=0,k;boolean flag=true;
     if(a=='▲') Zuozhuan.write("■");else if(a=='△'){Zuozhuan.write("●");flag=false;}  //Chunqiu:white->circle;Zuozhuan:black->exact square.
    for(i=0;s!=null;){
      for(k=0;k<s.length();k++) {
        a=s.charAt(k);
        if     (a=='▲'&&i!=0) {Zuozhuan.write(EndJZ(flag)+i+" 重"+j);i=0;j=0;Zuozhuan.write("\n"+"■");flag=true;}
        else if(a=='△'&&i!=0) {Zuozhuan.write(EndJZ(flag)+i+" 重"+j);i=0;j=0;Zuozhuan.write("\n"+"●");flag=false;}
        else {
        if     (a=='\u4dc0'||a=='\u4dc1'||a=='\u4dc2'||a=='\u4dc3'||a=='\u4dc4'||a=='\u4dc5'||a=='\u4dc6'||a=='\u4dc7'){j++;Zuozhuan.write(a+"☆"+j);}//Yijing Hexagrams Symbols
        else if(a=='\u4dc8'||a=='\u4dc9'||a=='\u4dca'||a=='\u4dcb'||a=='\u4dcc'||a=='\u4dcd'||a=='\u4dce'||a=='\u4dcf'){j++;Zuozhuan.write(a+"☆"+j);}
        else if(a=='\u4dd0'||a=='\u4dd1'||a=='\u4dd2'||a=='\u4dd3'||a=='\u4dd4'||a=='\u4dd5'||a=='\u4dd6'||a=='\u4dd7'){j++;Zuozhuan.write(a+"☆"+j);}
        else if(a=='\u4dd8'||a=='\u4dd9'||a=='\u4dda'||a=='\u4ddb'||a=='\u4ddc'||a=='\u4ddd'||a=='\u4dde'||a=='\u4ddf'){j++;Zuozhuan.write(a+"☆"+j);}
        else if(a=='\u4de0'||a=='\u4de1'||a=='\u4de2'||a=='\u4de3'||a=='\u4de4'||a=='\u4de5'||a=='\u4de6'||a=='\u4de7'){j++;Zuozhuan.write(a+"☆"+j);}
        else if(a=='\u4de8'||a=='\u4de9'||a=='\u4dea'||a=='\u4deb'||a=='\u4dec'||a=='\u4ded'||a=='\u4dee'||a=='\u4def'){j++;Zuozhuan.write(a+"☆"+j);}
        else if(a=='\u4df0'||a=='\u4df1'||a=='\u4df2'||a=='\u4df3'||a=='\u4df4'||a=='\u4df5'||a=='\u4df6'||a=='\u4df7'){j++;Zuozhuan.write(a+"☆"+j);}
        else if(a=='\u4df8'||a=='\u4df9'||a=='\u4dfa'||a=='\u4dfb'||a=='\u4dfc'||a=='\u4dfd'||a=='\u4dfe'||a=='\u4dff'){j++;Zuozhuan.write(a+"☆"+j);}
        else if(a!=' '&&a!='▲'&&a!='△') {Zuozhuan.write(a);i++;if(i%5==0) Zuozhuan.write(i+"|");}
    }}
    s=ZZ.readLine();
    }
     Zuozhuan.write(EndJZ(flag)+i+" 重"+j);
     Z.close();
     Zuozhuan.close();
    System.out.println("Succesfully Finished.");
}
static String EndJZ(boolean flag){
    String s;
    if(flag) s="  □傳文";
    else     s="  ○經文";
    return s;
}
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
舉例:
待處理的文件1.txt
處理後的文件2.txt
注:文字爲閔公《經》《傳》,因非本人錄入,取自網絡,不能保證其準確性。
    下載者要注意:不知如何取消下載扣金幣,本人試了一下,下載這兩箇文件要金幣(丟了3箇)。

[ 本帖最后由 曾伯昧 于 2010-8-9 07:24 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2010-8-11 01:41:40 | 显示全部楼层
稍微人性化一些,類名爲ZuozhuanCalculatorExt.
若直接使用代碼(可自由修改代碼,則以下“要求”可以不遵守),對於待處理文件(*.txt)格式要求:不可以有標題、標點。經、傳混排,在經文前加“△”符(不要如《《春秋經傳集解》那樣加“經”字,以免影響統計),傳文前加“▲”符(不要如《《春秋經傳集解》那樣加“傳”字,以免影響統計)。
  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.InputStreamReader;
  7. import java.io.OutputStreamWriter;
  8. import java.io.IOException;

  9. import javax.swing.JFrame;
  10. import javax.swing.JOptionPane;

  11. public class ZuozhuanCalculatorExt{
  12. public static void main(String args[]) throws IOException{
  13. Beginning();
  14. }

  15. static void Beginning() throws IOException{
  16. String S1,S2;
  17. S1=Input("");S2=Output();
  18. OK(S1,S2);
  19. }

  20. static String Input(String S){
  21. String Str=JOptionPane.showInputDialog(new JFrame(),S+"請告訴我待處理文件的路徑(例如,D:\\隱公.txt):","文件輸入",JOptionPane.PLAIN_MESSAGE);
  22. String s=Str;File f=new File(s);
  23. if(f.exists()==false||f.isFile()==false) {s=Input("找不到此文件"+s+"。");}
  24. else{
  25. int result=JOptionPane.showConfirmDialog(new JFrame(),("確定讀取"+s+"?"),"文件輸入",JOptionPane.YES_NO_OPTION);
  26. if(result==JOptionPane.NO_OPTION) s=Input("");
  27. }
  28. return s;
  29. }

  30. static String Output(){
  31. String Str=JOptionPane.showInputDialog(new JFrame(),"請告訴我文件處理後輸出的路徑(例如,D:\\隱公1.txt):","文件輸出",JOptionPane.PLAIN_MESSAGE);
  32. String s=Str;
  33. int result=JOptionPane.showConfirmDialog(new JFrame(),("確定寫入"+s+"?"),"文件輸出",JOptionPane.YES_NO_OPTION);
  34. if(result==JOptionPane.NO_OPTION) s=Output();
  35. return s;
  36. }

  37. static void OK(String path1,String path2) throws IOException{
  38. int result=JOptionPane.showConfirmDialog(new JFrame(),"待處理文件:"+path1+"\n處理后寫入:"+path2+"\n確定?(Y/N)","確認",JOptionPane.YES_NO_OPTION);
  39. if(result==JOptionPane.NO_OPTION) RE(path1,path2,"");
  40. else calculate(path1,path2);
  41. }

  42. static void RE(String path1,String path2,String S) throws IOException{
  43. int result=JOptionPane.showConfirmDialog(new JFrame(),"重置(Y)、結束(N)或繼續(取消)?","設置",JOptionPane.YES_NO_CANCEL_OPTION);
  44. if(result==JOptionPane.YES_OPTION) Beginning();
  45. else if(result==JOptionPane.NO_OPTION) calculate("null","null");
  46. else OK(path1,path2);
  47. }

  48. static void calculate(String path1,String path2) throws IOException{
  49. if(path1.equals("null")&&path2.equals("null")) {
  50. JOptionPane.showMessageDialog(new JFrame(),"用戶中止.","結果",JOptionPane.INFORMATION_MESSAGE);
  51. }
  52. else{
  53. InputStreamReader Z = new InputStreamReader(new FileInputStream(path1),"UTF-16");
  54. BufferedReader ZZ=new BufferedReader(Z);
  55. BufferedWriter Zuozhuan=new BufferedWriter( new OutputStreamWriter(new FileOutputStream(path2),"UTF-16"));
  56. String s=ZZ.readLine();
  57. char a=s.charAt(0);long i;int j=0,k;boolean flag=true;
  58. if(a=='▲') Zuozhuan.write("■");else if(a=='△'){Zuozhuan.write("●");flag=false;}
  59. for(i=0;s!=null;){
  60. for(k=0;k<s.length();k++){
  61. a=s.charAt(k);
  62. if (a=='▲'&&i!=0) {Zuozhuan.write(EndJZ(flag)+i+" 重"+j);i=0;j=0;Zuozhuan.write("\n"+"■");flag=true;}
  63. else if(a=='△'&&i!=0) {Zuozhuan.write(EndJZ(flag)+i+" 重"+j);i=0;j=0;Zuozhuan.write("\n"+"●");flag=false;}
  64. else {
  65. if (a=='\u4dc0'||a=='\u4dc1'||a=='\u4dc2'||a=='\u4dc3'||a=='\u4dc4'||a=='\u4dc5'||a=='\u4dc6'||a=='\u4dc7'){j++;Zuozhuan.write(a+"☆"+j);}
  66. else if(a=='\u4dc8'||a=='\u4dc9'||a=='\u4dca'||a=='\u4dcb'||a=='\u4dcc'||a=='\u4dcd'||a=='\u4dce'||a=='\u4dcf'){j++;Zuozhuan.write(a+"☆"+j);}
  67. else if(a=='\u4dd0'||a=='\u4dd1'||a=='\u4dd2'||a=='\u4dd3'||a=='\u4dd4'||a=='\u4dd5'||a=='\u4dd6'||a=='\u4dd7'){j++;Zuozhuan.write(a+"☆"+j);}
  68. else if(a=='\u4dd8'||a=='\u4dd9'||a=='\u4dda'||a=='\u4ddb'||a=='\u4ddc'||a=='\u4ddd'||a=='\u4dde'||a=='\u4ddf'){j++;Zuozhuan.write(a+"☆"+j);}
  69. else if(a=='\u4de0'||a=='\u4de1'||a=='\u4de2'||a=='\u4de3'||a=='\u4de4'||a=='\u4de5'||a=='\u4de6'||a=='\u4de7'){j++;Zuozhuan.write(a+"☆"+j);}
  70. else if(a=='\u4de8'||a=='\u4de9'||a=='\u4dea'||a=='\u4deb'||a=='\u4dec'||a=='\u4ded'||a=='\u4dee'||a=='\u4def'){j++;Zuozhuan.write(a+"☆"+j);}
  71. else if(a=='\u4df0'||a=='\u4df1'||a=='\u4df2'||a=='\u4df3'||a=='\u4df4'||a=='\u4df5'||a=='\u4df6'||a=='\u4df7'){j++;Zuozhuan.write(a+"☆"+j);}
  72. else if(a=='\u4df8'||a=='\u4df9'||a=='\u4dfa'||a=='\u4dfb'||a=='\u4dfc'||a=='\u4dfd'||a=='\u4dfe'||a=='\u4dff'){j++;Zuozhuan.write(a+"☆"+j);}
  73. else if(a!=' '&&a!='▲'&&a!='△') {Zuozhuan.write(a);i++;if(i%5==0) Zuozhuan.write(i+"|");}
  74. }
  75. }
  76. s=ZZ.readLine();
  77. }
  78. Zuozhuan.write(EndJZ(flag)+i+" 重"+j);
  79. Z.close();
  80. Zuozhuan.close();
  81. int result=JOptionPane.showConfirmDialog(new JFrame(),"順利完成.\n文件已寫入"+path2+"\n繼續下一箇任務?","結果",JOptionPane.YES_NO_OPTION);
  82. if(result==JOptionPane.YES_OPTION) Beginning();
  83. }
  84. }

  85. static String EndJZ(boolean flag){
  86. String s;
  87. if(flag) s=" □傳文";
  88. else s=" ○經文";
  89. return s;
  90. }

  91. }
复制代码

[ 本帖最后由 曾伯昧 于 2010-8-11 18:50 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2010-8-11 23:30:07 | 显示全部楼层
進一步人性化,以保證待處理文件的安全,類名爲ZuozhuanCalculatorExt_V320.
若直接使用代碼(可自由修改代碼,則以下“要求”可以不遵守),對於待處理文件(*.txt)格式要求:不可以有標點;正文前可以有標題,標題里不得使用“△”“▲”符號;經、傳混排,在經文前加“△”符(不要如《春秋經傳集解》那樣加“經”字,以免影響統計),傳文前加“▲”符(不要如《春秋經傳集解》那樣加“傳”字,以免影響統計)。
  1. //代碼出現嚴重Bug,更新見5樓
复制代码

[ 本帖最后由 曾伯昧 于 2010-8-12 14:02 编辑 ]
 楼主| 发表于 2010-8-12 12:07:17 | 显示全部楼层
進一步人性化,以保證待處理文件的安全,類名爲ZuozhuanCalculatorExt_V321.
若直接使用代碼(可自由修改代碼,則以下“要求”可以不遵守。如何修改,可參考代碼中的注釋),對於待處理文件(*.txt)文本內容格式要求:不可以有標點;正文前可以有標題,標題里不得使用“△”“▲”符號;經、傳混排,在經文前加“△”符(不要依《春秋經傳集解》那樣加“經”字,以免影響統計),傳文前加“▲”符(不要依《春秋經傳集解》那樣加“傳”字,以免影響統計)。其餘參見1樓,有矛盾處,以此爲準。
  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.InputStreamReader;
  7. import java.io.OutputStreamWriter;
  8. import java.io.IOException;

  9. import javax.swing.JFrame;
  10. import javax.swing.JOptionPane;

  11. public class ZuozhuanCalculatorExt_V321{

  12. public static void main(String args[]) {
  13. Input("");
  14. }

  15. static void Input(String S){
  16. String Str=JOptionPane.showInputDialog(new JFrame(),S+"請告訴我待處理文件的來源(例如,D:\\隱公.txt):\n 提示:注意防止輸入錯誤,如多按了空格鍵、只輸入了文件名等。","文件輸入",JOptionPane.PLAIN_MESSAGE);
  17. if (Str==null) calculate(null,null);
  18. else if(Str.equals("")) Input("未輸入。\n");
  19. else if(!new File(Str).exists()||!new File(Str).isFile()) Input("找不到此文件"+Str+"。\n");
  20. else{
  21. int result=JOptionPane.showConfirmDialog(new JFrame(),("確定讀取"+new File(Str).getAbsolutePath()+"?"),"文件輸入",JOptionPane.YES_NO_OPTION);
  22. if(result==JOptionPane.YES_OPTION) Output(Str,"");
  23. else if (result==JOptionPane.NO_OPTION) Input("");
  24. else calculate(null,null);
  25. }
  26. }

  27. static void Output(String path1,String S){
  28. String Str=JOptionPane.showInputDialog(new JFrame(),S+"請告訴我文件處理後輸出到(例如,D:\\隱公1.txt):","文件輸出",JOptionPane.PLAIN_MESSAGE);
  29. if (Str==null) calculate(null,null);
  30. else if(Str.equals("")) {Output(path1,"未輸入。\n");}
  31. else if(new File(Str).exists()&&new File(Str).isFile()) {
  32. int result=JOptionPane.showConfirmDialog(new JFrame(),("此路徑已有文件。\n確定寫入"+new File(Str).getAbsolutePath()+"?"),"文件輸出",JOptionPane.YES_NO_OPTION);
  33. if(result==JOptionPane.YES_OPTION) {
  34. if (new File(Str).getAbsolutePath().equals(new File(path1).getAbsolutePath())) RE(path1,Str,(byte)0);
  35. else OK(path1,Str);}
  36. else if(result==JOptionPane.NO_OPTION) Output(path1,"");
  37. else calculate(null,null);
  38. }
  39. else{
  40. int result=JOptionPane.showConfirmDialog(new JFrame(),("確定寫入"+new File(Str).getAbsolutePath()+"?"),"文件輸出",JOptionPane.YES_NO_OPTION);
  41. if(result==JOptionPane.YES_OPTION) OK(path1,Str);
  42. else if(result==JOptionPane.NO_OPTION) Output(path1,"");
  43. else calculate(null,null);
  44. }
  45. }

  46. static void OK(String path1,String path2){
  47. int result=JOptionPane.showConfirmDialog(new JFrame(),"待處理文件:"+new File(path1).getAbsolutePath()+"\n處理后寫入:"+new File(path2).getAbsolutePath()+"\n確定?(Y/N)","確認",JOptionPane.YES_NO_OPTION);
  48. if (result==JOptionPane.YES_OPTION) calculate(path1,path2);
  49. else if (result==JOptionPane.NO_OPTION) RE(path1,path2,(byte)1);
  50. else calculate(null,null);
  51. }

  52. static void RE(String path1,String path2,byte re){
  53. if(re==0) {
  54. int result=JOptionPane.showConfirmDialog(new JFrame(),"輸入路徑與輸出路徑衝突。\n重設輸出路徑(Y)或結束(N)?","設置",JOptionPane.YES_NO_OPTION);
  55. if (result==JOptionPane.YES_OPTION) Output(path1,"");
  56. else calculate(null,null);
  57. }
  58. else{
  59. int result=JOptionPane.showConfirmDialog(new JFrame(),"重置(Y)、結束(N)或繼續(取消)?","設置",JOptionPane.YES_NO_CANCEL_OPTION);
  60. if (result==JOptionPane.YES_OPTION) Input("");
  61. else if(result==JOptionPane.CANCEL_OPTION) OK(path1,path2);
  62. else calculate(null,null);
  63. }
  64. }

  65. static void calculate(String path1,String path2){
  66. if(path1==null&&path2==null) JOptionPane.showMessageDialog(new JFrame(), "用戶終止。","結束",JOptionPane.INFORMATION_MESSAGE);
  67. else {
  68. try{ //try程序塊 內 爲文字統計的核心程序,可按需修改。方法calculate()有一箇相關方法EndJZ(),可按需修改。
  69. BufferedReader Z=new BufferedReader(new InputStreamReader(new FileInputStream(path1),"UTF-16"));
  70. BufferedWriter Zuozhuan=new BufferedWriter( new OutputStreamWriter(new FileOutputStream(path2),"UTF-16"));
  71. String s=Z.readLine();
  72. char a=s.charAt(0);long i;int j=0,k;byte m=-1;
  73. if (a=='△') { Zuozhuan.write("●");m=0;} //經
  74. else if (a=='▲') { Zuozhuan.write("■");m=1;} //傳
  75. for(i=0;s!=null;){
  76. for(k=0;k<s.length();k++){
  77. a=s.charAt(k);
  78. if(a!='△'&&a!='▲'&&a!=' '&&m==-1) {Zuozhuan.write(a);} //標題文字處理
  79. if(a=='△'&&m==-1) {Zuozhuan.write("\n●");m=0;}
  80. if(a=='▲'&&m==-1) {Zuozhuan.write("\n■");m=1;}
  81. else if(a=='△'&&i!=0) {Zuozhuan.write(EndJZ(m)+i+" 重"+j);i=0;j=0;Zuozhuan.write("\n●");m=0;}
  82. else if(a=='▲'&&i!=0) {Zuozhuan.write(EndJZ(m)+i+" 重"+j);i=0;j=0;Zuozhuan.write("\n■");m=1;}
  83. else if(m!=-1) {
  84. if (a=='\u4dc0'||a=='\u4dc1'||a=='\u4dc2'||a=='\u4dc3'||a=='\u4dc4'||a=='\u4dc5'||a=='\u4dc6'||a=='\u4dc7'){j++;Zuozhuan.write(a+"☆"+j);} //排除文字統計中的干擾因素,此下八行語句爲計算六十四卦(重文)出現數目。
  85. else if(a=='\u4dc8'||a=='\u4dc9'||a=='\u4dca'||a=='\u4dcb'||a=='\u4dcc'||a=='\u4dcd'||a=='\u4dce'||a=='\u4dcf'){j++;Zuozhuan.write(a+"☆"+j);}
  86. else if(a=='\u4dd0'||a=='\u4dd1'||a=='\u4dd2'||a=='\u4dd3'||a=='\u4dd4'||a=='\u4dd5'||a=='\u4dd6'||a=='\u4dd7'){j++;Zuozhuan.write(a+"☆"+j);}
  87. else if(a=='\u4dd8'||a=='\u4dd9'||a=='\u4dda'||a=='\u4ddb'||a=='\u4ddc'||a=='\u4ddd'||a=='\u4dde'||a=='\u4ddf'){j++;Zuozhuan.write(a+"☆"+j);}
  88. else if(a=='\u4de0'||a=='\u4de1'||a=='\u4de2'||a=='\u4de3'||a=='\u4de4'||a=='\u4de5'||a=='\u4de6'||a=='\u4de7'){j++;Zuozhuan.write(a+"☆"+j);}
  89. else if(a=='\u4de8'||a=='\u4de9'||a=='\u4dea'||a=='\u4deb'||a=='\u4dec'||a=='\u4ded'||a=='\u4dee'||a=='\u4def'){j++;Zuozhuan.write(a+"☆"+j);}
  90. else if(a=='\u4df0'||a=='\u4df1'||a=='\u4df2'||a=='\u4df3'||a=='\u4df4'||a=='\u4df5'||a=='\u4df6'||a=='\u4df7'){j++;Zuozhuan.write(a+"☆"+j);}
  91. else if(a=='\u4df8'||a=='\u4df9'||a=='\u4dfa'||a=='\u4dfb'||a=='\u4dfc'||a=='\u4dfd'||a=='\u4dfe'||a=='\u4dff'){j++;Zuozhuan.write(a+"☆"+j);}
  92. else if(a!=' '&&a!='▲'&&a!='△') {Zuozhuan.write(a);i++;if(i%5==0) Zuozhuan.write(i+"|");}
  93. }
  94. }
  95. s=Z.readLine();
  96. }
  97. if(m!=-1) Zuozhuan.write(EndJZ(m)+i+" 重"+j);
  98. Zuozhuan.close();
  99. int result=JOptionPane.showConfirmDialog(new JFrame(),"順利完成。\n文件已寫入"+new File(path2).getAbsolutePath()+"。\n繼續下一箇任務?","結果",JOptionPane.YES_NO_OPTION);
  100. if(result==JOptionPane.YES_OPTION) Input("");
  101. else JOptionPane.showMessageDialog(new JFrame(), "去看看最終成果吧!","結束",JOptionPane.INFORMATION_MESSAGE);
  102. }
  103. catch(IOException e){
  104. int result=JOptionPane.showConfirmDialog(new JFrame(),"運行錯誤:"+e+"\n重新開始(Y)或結束(N)?","錯誤",JOptionPane.ERROR_MESSAGE);
  105. if (result==JOptionPane.YES_OPTION) Input("");
  106. else calculate(null,null);
  107. }
  108. }
  109. System.exit(0);
  110. }

  111. static String EndJZ(byte m){ //方法calculate()的相關方法,可按需修改。
  112. String s;
  113. if(m==0) s=" ○經文";
  114. else s=" □傳文";
  115. return s;
  116. }

  117. }
复制代码

[ 本帖最后由 曾伯昧 于 2010-8-12 12:44 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

爱如生国学 ( 京ICP备12023608号 )

GMT+8, 2024-5-4 17:19 , Processed in 0.080146 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表