BohYoh.comトップページへ

基本情報技術者試験 平成14年度・秋期・午後 問12 ソースプログラム

Java講座へ  情報処理技術者試験対策講座へ  情報処理技術者試験対策講座(Java)へ 
import java.io.FileReader;
import java.io.IOException;
import java.io.FileNotFoundException;
public class CSVParser {
   private FileReader reader;
   public CSVParser(String fileNamethrows FileNotFoundException {
      // テキスト入力ファイル用の reader を生成する。
      reader = new FileReader(fileName);
   }
   public void startDocument() {}
   public void startRecord(int n) {}
   public void value(String chars, int n) {}
   public void endRecord(int n) {}
   public void endDocument() {}

   public void parse() throws IOException {
      int c;
      StringBuffer buf = new StringBuffer();
      boolean endOfRecord = true
      int fieldNumber = 0;
      int recordNumber = 0;
      startDocument();
      while ((c = reader.read()) != -1) { // reader から1文字読み込む。
         // メソッド read は入力ストリームに利用可能な文字がない場合-1を返す。
         char ch = (char)c;
         switch (ch) {
           case ',':
              value(buf.toString(), ++fieldNumber);
              buf.delete(0, buf.length());
              break;
           case '\n':
              if (!endOfRecord) {
                 endOfRecord = true;
                 value(buf.toString(), ++fieldNumber);
                 buf.delete(0, buf.length());
                 fieldNumber = 0;
                 endRecord(recordNumber);
              }
              break;
           default:
              if (endOfRecord) {
                 startRecord(++recordNumber);
              }
              endOfRecord = false;
              buf.append(ch);
         }
      }
      endDocument();
   }
}



import java.io.FileNotFoundException;
public class TaggedDataGenerator extends CSVParser {
   public TaggedDataGenerator(String fileName
      throws FileNotFoundException 
      super(fileName);
   }
   public void startDocument() {
      System.out.println("<addressbook>");
   }
   public void startRecord(int n) {
      System.out.println("\t<person id=\""+n+"\">");
   }
   public void value(String chars, int n) {
      String tag = (n == 1"name" (n == 2"email" "phone";
      System.out.println("\t\t<"+tag+">"+chars+"</"+tag+">");
   }
   public void endRecord(int n) { 
      System.out.println("\t</person>");
   }
   public void endDocument() {
      System.out.println("</addressbook>");
   }
   public static void main(String [] args) {
      TaggedDataGenerator parser = null;
      try 
         parser = new TaggedDataGenerator("test.csv");
         parser.parse();
      catch (Exception e) {
         e.printStackTrace();
      }
   }
}