Größe von Textdateien reduzieren
-
Ja diese Ideen hatte ich auch schon. Das Problem ist das jede Zeichenkette wichtig ist. Mich wundert nur das es Textdateien mit weit aus mehr Zeichen, und sogar mit Sonderzeichen gibt, die aber gerade mal 105kB haben...
Deshalb dachte ich, dass ich vielleicht eine andere Funktion dafür brauche.Danke für eure Antworten.
-
Wir müßten mehr über die Daten wissen und über deren Verwendung und was Dich an der bisherigen Lösung stört.
Aber es scheint so, daß alles bestens ist. Eine Milliarde Strings, die je vier Zeichen und einen Terminator beanspruchen, wiegen nunmal 5G.
-
zeig mal deinen Code
-
VRComputing schrieb:
Ja diese Ideen hatte ich auch schon. Das Problem ist das jede Zeichenkette wichtig ist. Mich wundert nur das es Textdateien mit weit aus mehr Zeichen, und sogar mit Sonderzeichen gibt, die aber gerade mal 105kB haben...
Deshalb dachte ich, dass ich vielleicht eine andere Funktion dafür brauche.Danke für eure Antworten.
Bei Textdateien gilt normalerweise 1 Zeichen ist ein Byte. Wenn Du aber UTF-8 benutzt benötigen manche Zeichen 2 Byte. Bei Unicode sind es sogar alle. Hast Du vielleicht so ein Problem?
mfg Martin
-
mgaeckler schrieb:
VRComputing schrieb:
Ja diese Ideen hatte ich auch schon. Das Problem ist das jede Zeichenkette wichtig ist. Mich wundert nur das es Textdateien mit weit aus mehr Zeichen, und sogar mit Sonderzeichen gibt, die aber gerade mal 105kB haben...
Deshalb dachte ich, dass ich vielleicht eine andere Funktion dafür brauche.Danke für eure Antworten.
Bei Textdateien gilt normalerweise 1 Zeichen ist ein Byte. Wenn Du aber UTF-8 benutzt benötigen manche Zeichen 2 Byte. Bei Unicode sind es sogar alle. Hast Du vielleicht so ein Problem?
mfg Martin
selbst wenn das der fall sein sollte - offensichtlich hast du mindestens 2*1024*1024*1024 Zeichen in der Datei stehen - das die dann groß wird, sollte offensichtlich sein.
in C++ nutzt man im übrigen Streams um in eine Datei zu schreiben:#include <fstream> std::ofstream output("bla.txt"); output << 123 << std::endl;bb
edit: C++-Doku:
http://www.cplusplus.com/
und dort die stream-doku:
http://www.cplusplus.com/reference/iostream/
-
VRComputing schrieb:
Mich wundert nur das es Textdateien mit weit aus mehr Zeichen, und sogar mit Sonderzeichen gibt, die aber gerade mal 105kB haben...
Deshalb dachte ich, dass ich vielleicht eine andere Funktion dafür brauche.Wie, mehr Zeichen?
Eine normale Textdatei kann nie kleiner sein als die Anzahl der Zeichen die drin gespeichert sind. Also bei 1 Mio. Zeichen muss die Textdatei immer >= 1 Mio. Bytes sein.
Und wenn deine deutlich grösser ist (z.B. mehr als doppelt so gross), dann machst du ziemlich sicher beim Schreiben irgendwas falsch.
-
unskilled schrieb:
in C++ nutzt man im übrigen Streams um in eine Datei zu schreiben:
Das schöne ist, dass es von boost die gängigen Kompressionsalgorithmen auch noch einmal als Stream gekapselt gibt. Das heißt, man muss nur das Streamobjekt austauschen und hat instant eine komprimierte Datei als Ausgabe.
Da du schon mit fprintf angefangen hast, nützt dir das natürlich herzlich wenig. So ein bisschen muss ich sagen: Selbst schuld. Willst du etwas vergleichbares mit fprintf erreichen, müsstest du das Standard fprintf mit einer eigenen Version ersetzen (mag gut sein, dass es dafür auch schon eine C Bibliothek gibt).
-
Also erst mal Danke an Alle,
mein Grundlegendes Problem ist eigentlich das ich nicht verstehe wie es Textdateien geben kann die weitaus mehr Zeichen beinhalten als meine aber nicht mal größer als 1MB sind.
Zu der Frage oben wegen der Problematik:
Das Programm erstellt alle möglichen Permutation aus einer beliebigen Zeichenkette. Diese Permutationen möchte ich in, wenn es geht, EINER Textdatei speichern. Das Problem ist nur das man eine Textdatei mit 5GB nicht gut lesen/öffnen kann. Die Verwendung der Strings ist lediglich das Lesen zur Kontrolle sonst nichts.
MFG
V.R.
-
von wie vielen zeichen sprechen wir denn?
5 -> 5! *5 Zeichen => 600Byte
8 -> 8! *8 Zeichen => 322KByte
12->... => 5,7GByteund da sind noch nicht mal die Zeilenumrbüche eingerechnet...
bb
PS: Für die permutationen gibt es ne schöne fertige Fkt.: http://www.cplusplus.com/reference/algorithm/next_permutation/
-
VRComputing schrieb:
Das Problem ist nur das man eine Textdatei mit 5GB nicht gut lesen/öffnen kann.
Doch, kann man genauso schnell öffnen und genauso schnell überall lesen, nur alles auf einmal einlesen braucht natürlich länger.
-
bbee schrieb:
VRComputing schrieb:
Das Problem ist nur das man eine Textdatei mit 5GB nicht gut lesen/öffnen kann.
Doch, kann man genauso schnell öffnen und genauso schnell überall lesen, nur alles auf einmal einlesen braucht natürlich länger.
ich denke, er redet vom einlesen weil er das öffnen mit wordpad(bzw notepad, das ich bei so großen dateien nicht mehr empfehlen würde^^) meinte - zumindest schrieb er danach, dass er die datei nur haben will, um die permutationen durchzugucken.
bb
-
VRComputing schrieb:
Das Problem ist nur das man eine Textdatei mit 5GB nicht gut lesen/öffnen kann.
Nicht mit notepad.exe
Aber kannsttype dateinamemachen oder einen anderen Angucker nehmen, zum Beispiel den far file manager.
-
Wir sprechen hier von !n Zeichenketten mitn Zeichen plus 1 newline nach jeder Zeichenkette.
Und ja ^^ ich hatte Probleme die Dateien mit Word,Editor,Wodpad oder was auch immer noch gibt zu öffnen...
-
was sind !n Zeichen?
wie ich an den 3 beispielen oben schon klargemacht habe, ist es einfach nicht möglich, alle kombinationen zu speichern.
vermutlich wird bei 14zeichen deine platte eh schon voll sein und selbst eine schnelle platte wird zum kompletten einlesen der datei locker 10 minuten brauchen.bb
-
!n = 1*2*3*...*n Zeichen
! Heißt Fakultät und steht für die Menge aller möglichen Permutationen oder umgspr. "Kombinationen".
D.h. man hat bei 3 zeichen !3 Permutationen also 1*2*3 = 6
Soll das heißen es gibt keine Möglichkeit Zeichen noch kleiner zu machen?
-
VRComputing schrieb:
!n = 1*2*3*...*n Zeichen
! Heißt Fakultät und steht für die Menge aller möglichen Permutationen oder umgspr. "Kombinationen".
D.h. man hat bei 3 zeichen !3 Permutationen also 1*2*3 = 6
Soll das heißen es gibt keine Möglichkeit Zeichen noch kleiner zu machen?
hast du mein posting überhaupt gelesen?
myself schrieb:
von wie vielen zeichen sprechen wir denn?
5 -> 5! *5 Zeichen => 600Byte
8 -> 8! *8 Zeichen => 322KByte
12->... => 5,7GByte1. heißt es n!
2. wollte ich in dem posting die genaue zahl der zeichen erfahren - da nützt mir ein n herzlich wenig, so klug war ich auch davor schon...doch, man kann sie kleiner machen:
-binär schreiben
oder
-komprimieren
oder
-nur jede x-te Permutation speichernin jedem Fall würde man ein kleines Programm zum betrachten schreiben müssen.
wenn man nur jede x-te permutation speichert, muss man eben aufpassen, wie man x wählt, um in annehmbarer zeit an die y-te permutation zu kommenbb
-
Alles klar ^^
kann sein das ich mich verlesen habe und Danke für die Korrektur...
Ich gebe mich nun zufrieden.MFG
V.R.