2016-07-25 3 views
0

テーブルのデータを生成してファイルに書き出す必要があります。 出力ファイルは、次のようになります。| AAAA | bbba |これは、単一の行を生成することによって、それを行うのは簡単です列単位でファイルに値を書き込む

123|aaaa|bbba| 
124|aaab|bbbb| 
125|aaac|bbbc| 

123のように、\ nはとそれを書くが、私は、単一の列を生成する必要がジェネレータにはパフォーマンス上の問題があるため、それを書き込んでから別のものを生成してください。

123| 
124| 
125| 

その後:最後に

123|aaaa| 
124|aaab| 
125|aaac| 

そして:

123|aaaa|bbba| 
124|aaab|bbbb| 
125|aaac|bbbc| 

私の現在のコードを見てのような:

私のようなものをファイルに書き込む必要があるforループで

os = new BufferedOutputStream(new FileOutputStream(filename)); 
StringBuffer column = new StringBuffer(); 
for (int i = 0; i < numberofcolumns; i++) { 
    for (int j = 0; j < width; j++) { 
     column.append(columns[i].genValue()); 
     column.append("|\n"); 
    } 
    os.write(column.toString().getBytes(), 0, entry.length()); 
} 
+1

現在の出力を追加できますか? –

+0

どのような解決策も絶対に非効率的です。非常に複雑なので、列ごとに書くのを避けるためにできることをしてください。各列を別のファイルに書き込んで、最後にそれらのファイルを連結する方がはるかに優れています。 – xenteros

答えて

1

なぜファイルに即座に書き込み、毎回それを開くのですか? 内部で保存し、すべてのデータが生成されたら、ファイルに書き込みますか?

3次元配列を宣言し、その中にデータを書き込むことができます。 これを終えたら、配列をファイルに書き出します。はるかに簡単にする必要があります。

0

これは本当に悪い考えのように見えますが、pasteで達成することができます

$ echo """a 
> b 
> c 
> d""" > testFile 

$ echo """1 
> 2 
> 3 
> 4""" | paste -d"|" testFile - > modifiedFile 

$ cat modifiedFile 
a|1 
b|2 
c|3 
d|4 

それは悪いアイデアのように見えるのはなぜ:あなたのジェネレータが遅くなることができますが

  • 、私は疑います出力する列の数がスロットルです。データの取得/フィルタリングなどが操作の速度を低下させる可能性があります。
  • 各列のデータが同じ順序で返されることを確認できますか?
  • 新しい列を取得するたびにファイルを書き換えるのは非常に遅いです。各列のデータをメモリに保存することはできません(つまり、bash配列?)、完了したらファイルを書き込めませんか?
関連する問題