2016-07-25 58 views
0

我需要生成表格數據並將其寫入文件。 輸出文件應該是這樣:將值按列寫入文件

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

這很容易通過生成單列做到這一點,像123 | AAAA | BBBA | \ n,寫,但我需要生成一個由於發生器有性能問題,編寫它,然後生成另一個。

在for循環中,我需要寫入文件類似:

123| 
124| 
125| 

然後:

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

最後:

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

我當前的代碼如下所示:

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

爲什麼你想立即寫入文件並重新打開它? 如何在內部保存並在生成所有數據後將其寫入文件?

您可以聲明一個三維數組並將數據寫入其中。 完成此操作後,將數組寫入文件。應該容易得多。

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數組?),並在完成後寫入文件?