0

OO で 2 つのレポートを実装したいと考えています。レポートはすべて似ています (ただし、列とデータが異なります)。

name age gender phone_number
A    10  male   1234
B    20  female 5678
C    30  n/a    9012

ご覧のとおり、レポートでは、各列に独自のヘッダーとパーサー (データを解析するため) があります。オブジェクト列を設計しました:

class Column<T extends Object>
{
    private String header;
    private ColumnParser parser;

    public Column(String header)
    {
        this.header = header;
        this.parser = new ColumnParser<T>()
        {
            public String parse(T t)
            {
                return t.toString();
            }
        }
    }

    public Column(String header, ColumnParser parser)
    {
        this.header = header;
        this.parser = parser;
    }

    public interface ColumnParser<T>
    {
        public String parse(T t);
    }
}

そのため、各列には、その列のデータを解析するための独自のパーサーがあります。しかし、この後、データを各列にマップして解析できるようにデータを保存する方法がわかりません。

お知らせ下さい。

4

1 に答える 1

0

まず、元のデータ (メモリ内) の形式を知っておくと役に立ちます。たとえば、Object[][] ですか?

第二に、必要な出力はタブで区切られているように見えます。あれは正しいですか?

第 3 に、テキスト ファイルに書き込むには、行ごとに追加する必要があります。あなたの現在のコードは、列ごとに追加することを示唆しているようです - これは実装がはるかに難しいでしょう。

データを String[][] に変換できる場合 (これは簡単なはずです)、次を使用してファイルに書き込むことができます。タブ区切りが必要な場合は、区切り文字として「\ t」を使用できます(ただし、これはWindows用です-改行のようにOS固有かどうかはわかりません)。

public static void writeToFile(File file, String[][] data, String delimiter){
  PrintWriter out = new PrintWriter(new FileWriter(file));
  for (String[] row : data){
    out.write(makeLine(row, delimiter));
  }
  out.close();
}

private static String makeLine(String[] row, String delimiter) {
  StringBuilder str = new StringBuilder();
  for (String cell : row){
    str.append("\""+cell+"\"").append(delimiter);
  }
  str.deleteCharAt(str.length()-1);
  str.append("\n");
  return str.toString();
}
于 2012-08-24T07:52:11.190 に答える