Lesen von Ganzzahlen aus einer text-Datei mit dem Worte
Ich versuche zu Lesen, nur die ganzen zahlen aus einer Textdatei strukturiert wie diese....
ALS 46000
BZK 39850
CAR 38000
//....
mit ifstream.
Habe ich mir überlegt 2 Optionen.
1) Regex mit Boost
2) Erstellen Sie eine Wegwerf-string ( d.h. ich lese in einem Wort, nichts tun, Lesen Sie dann in der Partitur ). Dies ist jedoch der Letzte Ausweg.
Gibt es Möglichkeiten, um auszudrücken, dass in C++ ich möchte den ifstream nur zu Lesen im text, integer? Ich bin zurückhaltend, um reguläre Ausdrücke verwenden, wenn es sich herausstellt, dass es eine viel einfachere Möglichkeit, dies zu erreichen.
InformationsquelleAutor Anonymous | 2010-01-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
warum einfache Dinge kompliziert?
was ist falsch in diesem :
InformationsquelleAutor user240709
Edit:
es ist in der Tat die Möglichkeit, auf die streams direkt mit Geist, als ich bereits angedeutet, mit einem parser:
und eine Zeile code(mit Ausnahme der Variablen-Definitionen):
Sie bekommen alle zahlen in einen Vektor auf einmal mit einer Zeile, könnte nicht einfacher sein.
wenn Sie nicht dagegen, mit boost.spirit2. der parser zu erhalten Sie zahlen aus einer Linie, nur ist
extrahieren, alles ist
Finden Sie das ganze Programm unten(Test mit VC10 Beta 2):
Ausgänge:
InformationsquelleAutor t.g.
Können Sie anrufen ignorieren zu haben, überspringt eine angegebene Anzahl von Zeichen.
Kann man auch sagen, dass es halt in ein Trennzeichen. Sie würden noch brauchen, um zu wissen, die maximale Anzahl von Zeichen, die den führenden string sein könnte, aber das würde auch für kürzere Geigen:
Könnte man auch schreiben eine Schleife, die nur liest Zeichen, bis Sie sehen, die erste Ziffer:
Rufen Sie Sie abwechselnd.
while (istr) { istr.ignore(4); int num = 0; istr >> num; /* do something with num */ }
InformationsquelleAutor R Samuel Klatchko
hier geht 😛
Das macht mich lieben die Einfachheit von C++ so viel mehr 🙂
InformationsquelleAutor Freeman
"oder" %05d, wenn Sie die führenden Nullen und fester Breite von 5....
manchmal der Schnellste Weg, Dinge zu tun, in C++ ist die Verwendung von C. 🙂
Lieber den einfacheren C++ - Weg: Datei - >> Wort >> Zahl;
InformationsquelleAutor
Können Sie erstellen, ctype-Facette, die klassifiziert Buchstaben, der als Leerraum. Erstellen Sie ein Gebietsschema, das verwendet diese Facette, dann verleihen Sie den stream mit, das Gebietsschema. Mit, dass, können Sie extrahieren von zahlen aus dem Strom, aber alle Buchstaben werden so behandelt, als weiße Leerzeichen (D. H., wenn Sie extrahieren Sie die Nummern, die Buchstaben werden ignoriert, genauso wie ein Leerzeichen oder ein tab wäre):
Solch ein Gebietsschema kann wie folgt Aussehen:
Beispiel-code verwenden, könnte es so Aussehen:
Mithilfe von Beispieldaten, die Ausgabe, die ich von dieser sieht wie folgt aus:
Beachten Sie, dass, wie es steht, die ich geschrieben habe, dies zu akzeptieren nur Ziffern. Wenn Sie (beispielsweise) Lesen würden, floating-point-zahlen, würden Sie auch behalten wollen '.' (oder die Gebietsschema-spezifische äquivalent) als Dezimaltrennzeichen. Ein Weg, um Dinge zu handhaben, ist eine Kopie der normalen ctype Tisch, und dann nur die Dinge, die Sie wollen, zu ignorieren, da
space
.InformationsquelleAutor Jerry Coffin