import java.io.*; import java.util.*; /** * SgfReader クラスは、SGF形式の棋譜情報を、囲碁Viewer形式の棋譜情報に変換します。 * @author Jiro Suzuki */ public class SgfReader{ private Kifu kifu; private Vector sgfVectorTree; /** * 棋譜情報が空のインスタンスを生成します。 */ SgfReader(){ kifu=new Kifu(); sgfVectorTree=new Vector(); } /** * SGF形式で作成された棋譜情報ファイルを読み込み、囲碁Viewer形式の棋譜情報に変換します。 * @param fileName SGF形式の棋譜ファイル名。フルパス指定で渡す。 * @return 囲碁Viewer形式の棋譜情報。Kifuクラス形式。 */ public Kifu read(String fileName){ String strAll=""; try{ String line; BufferedReader br=new BufferedReader(new FileReader(fileName)); while((line=br.readLine()) != null ) { strAll=strAll.concat(line); } } catch(IOException e){ System.out.print("Error:"+e); System.exit(1); } //SgfTree取得 //ここで、SGF形式のデータ(String)から手順部分のデータツリーをVector形式で取得する。 SgfTree sgfTree=new SgfTree(); sgfVectorTree=sgfTree.getSgfTree(strAll); //本手順取得 //ここで、Vector形式の手順を、囲碁Viewer形式の手順に変換し、同時に参考図情報を取り除く。 SgfOrder sgfOrder=new SgfOrder(); String[] strOrder=sgfOrder.includeOrder(sgfVectorTree); IntOrder intOrder=new IntOrder(); OrderOfMoves orderOfMoves=intOrder.translateSgfToInt(strOrder); kifu.setOrderOfMoves(orderOfMoves); //ゲームインフォメーション取得 GameInformation gi=new GameInformation(); gi.editGameInformation(sgfVectorTree); kifu.setGameInformation(gi); return kifu; } /** * SGF形式の手順データツリーを返します。 * @return SGF形式の手順データツリー。Vectorクラス形式。 */ public Vector getSgfTree(){ return sgfVectorTree; } }