基本情報技術者試験 平成14年度・秋期・午後 問12 ソースプログラム
import java.io.FileReader;
import java.io.IOException;
import java.io.FileNotFoundException;
public class CSVParser {
private FileReader reader;
public CSVParser(String fileName) throws 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();
}
}
}