2016-07-25 11 views
0

Ich muss Tabellendaten generieren und in Datei schreiben. Ausgabedatei sollte wie folgt aussehen:Werte in Datei nach Spalten schreiben

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

Es ist einfach, es zu tun durch eine einzelne Zeile zu erzeugen, wie 123 | aaaa | bbba | \ n und schreiben Sie es, aber ich brauche eine einzige Spalte erzeugen Da der Generator Leistungsprobleme hat, schreibe ihn und erzeuge einen anderen.

In der for-Schleife etwas wie muss ich schreiben in Datei:

123| 
124| 
125| 

Dann:

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

Und schließlich:

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

wie Mein Aussehen aktuellen Code:

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

Können Sie bitte Ihre aktuelle Ausgabe hinzufügen? –

+0

Jede Lösung wird absolut ineffizient sein. Mach was du kannst, um zu vermeiden, Spalte für Spalte zu schreiben, da es sehr komplex ist. Es ist viel besser, jede Spalte in eine andere Datei zu schreiben und am Ende diese Dateien zu verketten. – xenteros

Antwort

1

Warum möchten Sie es sofort in eine Datei schreiben und jedes Mal neu öffnen? Was ist mit intern speichern und nachdem alle Daten generiert worden sind, schreiben Sie es in die Datei?

Sie könnten ein dreidimensionales Array deklarieren und die Daten darin schreiben. Nachdem Sie dies abgeschlossen haben, schreiben Sie das Array in die Datei. Sollte viel viel einfacher sein.

0

Das ist wirklich sieht aus wie eine schlechte Idee, könnte aber mit paste erreicht werden:

$ 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 

Warum sieht es aus wie eine schlechte Idee:

  • Während Ihr Generator langsam sein kann, bezweifle ich das Anzahl der auszugebenden Spalten ist die Drosselung: Es ist höchstwahrscheinlich die Datenwiederherstellung/Filterung/etc., die den Vorgang verlangsamt.
  • Können Sie sicher sein, dass die Daten jeder Spalte in der gleichen Reihenfolge zurückgegeben werden?
  • Das Umschreiben der Datei jedes Mal, wenn Sie eine neue Spalte erhalten, ist sehr langsam. Können Sie die Daten nicht aus jeder Spalte im Speicher (z. B. einem Bash-Array?) Speichern und die Datei schreiben, wenn Sie fertig sind?
Verwandte Themen