Formatiertes Schreiben in eine Datei
-
Ich möchte einen Speicherbereich direkt in eine Datei schreiben. Allerdings nicht als Binärdatei, sondern als formatierte Textdatei. Die Performance spielt eine große Rolle... hat bereits jemand sowas schonmal gemacht?
Viele Grüße
-
Klar kannst du das - schau dir doch mal die Möglichkeiten von fprintf() genauer an, da kannst du sicher die "richtige" Formatierung zusammenstellen.
-
Ja ok, aber wie schnell ist das im Vergleich zu printf(..)?
BTW: Wie kann ich eigentlich die Tabstops in printf(..) mit \t selbst definieren?
-
pyjamaboy schrieb:
Ja ok, aber wie schnell ist das im Vergleich zu printf(..)?
Es dürfte nicht wesentlich langsamer werden (printf() unterscheidet sich lediglich darin, daß es auf ein bestimmtes FILE (stdin) festgelegt ist).
BTW: Wie kann ich eigentlich die Tabstops in printf(..) mit \t selbst definieren?
\t ist ein ganz normales Zeichen - die größere Breite bekommt es erst durch die Art, wie es interpretiert wird.
-
Ich brauche die effizienteste Art Daten in eine Datei zu schreiben (wegen Echtzeitbedingung)... wahrscheinlich bleibt mir nichts anderes übrig als das ganze mit binärdateien zu machen, das geht schneller, oder?
Dass die Tabs automatisch "festgelegt" werden, weiß ich ja. aber ich will z.B. bei 80-Zeichen-Breite nur 2 Spalten (bzw. 2 Tabs...). Gehen tuts auf jedenfall, weiß aber nicht wie.
-
pyjamaboy schrieb:
Ich brauche die effizienteste Art Daten in eine Datei zu schreiben (wegen Echtzeitbedingung)... wahrscheinlich bleibt mir nichts anderes übrig als das ganze mit binärdateien zu machen, das geht schneller, oder?
Da werden sich die verschiedenen Funktionen nicht viel nehmen - der Haupt-Engpass beim Schreiben ist imo die Schreibgeschwindigkeit der Festplatte. (eventuell kannst du durch Größenänderung des Schreibpuffers noch etwas daran drehen).
Dass die Tabs automatisch "festgelegt" werden, weiß ich ja. aber ich will z.B. bei 80-Zeichen-Breite nur 2 Spalten (bzw. 2 Tabs...). Gehen tuts auf jedenfall, weiß aber nicht wie.
Und jetzt den Satz bitte so, daß man ihn auch verstehen kann. Was genau willst du schreiben?
-
z.B. hier:
#15 r=37 a=256.000000 b=2.000000 c=512.000000
#16 r=38 a=1280.000000 b=1.000000 c=2560.000000
#17 r=39 a=1282.500000 b=10.000000 c=3840.000000
#18 r=40 a=1285.000000 b=1.000000 c=2570.000000
#19 r=41 a=1287.500000 b=10.000000 c=3855.000000
#20 r=42 a=258.000000 b=2.000000 c=516.000000
#21 r=43 a=1290.000000 b=1.000000 c=2580.000000
#22 r=44 a=1292.500000 b=10.000000 c=3870.000000
#23 r=45 a=1295.000000 b=1.000000 c=2590.000000
#24 r=46 a=1297.500000 b=10.000000 c=3885.000000
#25 r=47 a=260.000000 b=2.000000 c=520.000000
#26 r=48 a=1300.000000 b=1.000000 c=2600.000000
#27 r=49 a=1302.500000 b=10.000000 c=3900.000000
#28 r=0 a=5.000000 b=1.000000 c=10.000000
#29 r=1 a=7.500000 b=10.000000 c=15.000000
#30 r=2 a=2.000000 b=2.000000 c=4.000000
#31 r=3 a=10.000000 b=1.000000 c=20.000000
#32 r=4 a=12.500000 b=10.000000 c=30.000000
#33 r=5 a=15.000000 b=1.000000 c=30.000000
#34 r=6 a=17.500000 b=10.000000 c=45.000000#28-34 sollte genauso wie die anderen eingerückt sein...
Weißt du was ich meine?
fprintf ist jedenfalls definitiv zu langsam
was mach ich denn dann? Der Speicher ist irgendwann voll und ich bin gezwungen die Daten irgendwo auf der Platte auszulagern (am Ende sinds bestimmt mehr als 500MB Daten...)
-
Da wäre es vermutlich besser, die Daten binär zu schreiben (und erst bei der Auswertung der geschriebenen Datei die Daten in Textform aufzuschlüsseln (außerdem ist ein double in Binärform deutlich kleiner als in Textform - und mögliche Rundungsprobleme beim Konvertieren kannst du auch umgehen).
(wenn du eine konstante Feldbreite haben willst, kannst du die bei (f)printf-Formatkenner mit angeben als z.B. "%7.2f" (insgesamt sieben Stellen, davon 2 nach dem Komma))
-
pyjamaboy schrieb:
Ich möchte einen Speicherbereich direkt in eine Datei schreiben.
fwrite(pcmem, 1, isize, fp);