So finden Sie die Anzahl der Zeichen in einer Datei, ohne den Inhalt zu durchlaufen

7

In einem Projekt muss ich eine Datei lesen, und ich muss mit der Anzahl der Zeichen in einer Datei arbeiten, und gibt es eine Möglichkeit, die Anzahl der Zeichen zu erhalten, ohne sie Zeichen für Zeichen zu lesen (sonst muss ich das tun) lese die Datei zweimal, einmal um die Anzahl der Zeichen zu finden.)

Ist es überhaupt möglich?

    
SpeedBirdNine 03.02.2012, 16:42
quelle

5 Antworten

8

Sie können dies versuchen:

%Vor%

Dies gibt jedoch die Anzahl der Bytes in der Datei zurück, nicht die Anzahl der Zeichen . Es ist nicht dasselbe, es sei denn, die Codierung ist bekanntlich ein Byte pro Zeichen (z. B. ASCII).

Sie müssen die Datei an den Anfang zurückspulen, nachdem Sie die Größe gelernt haben:

%Vor%     
dasblinkenlight 03.02.2012, 16:47
quelle
11

Ja.

Suchen Sie bis zum Ende die Position des Endes, das die Größe ist.

%Vor%

In C ++ hat der Stream die gleiche Funktionalität:

%Vor%     
Martin York 03.02.2012 16:48
quelle
1

Ich denke, Sie suchen wahrscheinlich nach einer dynamischen Speicherlösung . Was Sie tatsächlich gefragt haben, ist "Gibt es eine Möglichkeit, die Anzahl der Zeichen in einer Datei zu erhalten, ohne sie zu lesen?". Die Antwort (angenommen ein Byte pro Zeichen) ist ja, Sie können den stat Aufruf verwenden, um die Dateigröße zu erhalten, und die Dateigröße in Bytes ist die Anzahl der Zeichen. Mit UTF-8 ist die Antwort nein, aber lassen wir das für den Moment beiseite, da gerade-lernende Informatiker sich normalerweise keine Gedanken über Internationalisierung machen.

Ich denke, der Grund, warum Sie wissen wollen, wie viele Zeichen es gibt, ist, dass Sie genügend Speicherplatz haben, um alle zu speichern. Sie müssen nicht wissen, wie groß die Datei ist, um das Ganze zu speichern.

Wenn Sie ein std::vector<char> haben, kann es anfangen, zehn Zeichen zu halten, dann wächst es, um zwanzig, dann zehntausend zu halten ... Und wenn Sie mit dem Lesen der Datei fertig sind, wird es sie alle sogar halten obwohl du nie wusstest, wie viele es sein würden.

    
Borealid 03.02.2012 16:46
quelle
1

Aus der Spitze meines Kopfes ist so ein Blick auf die Dateigröße und dividieren, die wie viele Bytes ein einzelnes Zeichen ist?

Beim Umgang mit Leerzeichen und Endzeilen treten Probleme auf.

    
Metalstorm 03.02.2012 16:47
quelle
1

Die einfache Antwort lautet nein. Genauer gesagt ist es systemabhängig: unter Unix, ist es möglich (z. B. mit stat ); unter Windows ist es nicht möglich für eine Textdatei, aber wenn Sie die Datei im Binärformat lesen, Es gibt eine Funktion GetFileSize , die verwendet werden kann.

Obwohl nicht garantiert, unter allen Implementierungen, die ich kenne (für diese beiden Plattformen), bis zum Ende der Datei suchen, dann tun ein ftell , gibt etwas zurück, das bei ausreichender Konvertierung in a großer integraler Typ, wird die gleichen Ergebnisse wie oben (mit der gleiche Einschränkungen).

Schließlich: Warum brauchen Sie diese Informationen? Wenn es nur ein zuzuteilen ist Puffer mit der richtigen Größe, auch mit einer Textdatei, GetFileSize (und tell nach dem Suchen bis zum Ende) wird einen etwas größeren Wert zurückgeben als die Anzahl der Bytes, die Sie lesen können. Du wirst Puffer leicht sein überdimensioniert, aber das ist in der Regel kein Problem.

    
James Kanze 03.02.2012 16:49
quelle

Tags und Links