2016-07-25 7 views
0

Мне нужно сгенерировать данные таблицы и записать ее в файл. Выходной файл должен выглядеть следующим образом:Запись значений в файл по столбцам

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

Это легко сделать это путем создания одной строки, как 123 | AAAA | bbba | \ п и писать, но мне нужно, чтобы создать единый столбец из-за генератора проблемы с производительностью, записать его, а затем создать еще один.

В течение цикла мне нужно записать в файл что-то вроде:

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?) И записать файл после завершения?