Zeilenauslesen aus Textdatei

Lenkwaffe

Grünschnabel
Folgendes:
Ich möchte aus der anhängeden Textdatei nur die Zeilen "Ausgabe: Sxxxxxx" ausgelesen haben, und die Anzahl dieser Zeilen als Summe ausgeben bekommen...Wer kann mir weiterhelfen?

Code:
CBEmuIO Version 1.01
CBI4694 V 1.00
Error from:PRT1	 - 32:19Error from:PRT1	 - 32:65benden mit eingabe von <ende>
 
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
 
Ein bissel mehr Infos waere von Vortiel! Sieht dein Header immer so aus? Ist der String vor deiner Zahl immer gleich lang? Dann kannst ist es ziemlich einfach, sind sie Variabel, wirds zwar nicht schwierig , aber mann muss ein bischen Stringmatching zusaetlich betreiben.
 
Also der Header sieht immer gleich aus...die werte "Ausgabe: S" bis zu dem Punkt sind auch immer gleich. Es handelt sich dabei um ean codes die varieren. Jede Zeile beginnt immer mit Ausgabe ab dem Header...aber die größe von dem header ändert sich nicht. die ist immer 3 Zeilen hoch. ich hab mir schon mal gedanken gemacht die einzelnen zeilen nach dem wort ausgabe zu suchen aber ich kann das irgendwie nicht umsetzen, weil es mir an programmier fähigkeit mangelt...
 
Hi versuch es maal hiermit:

Code:
#include <iostream>
#include <fstream>
#include <sstream>
#include <iterator>

using namespace std;

int main(){

        string *search = new string("Ausgabe:S"); 
        string::size_type begin = 0;
        string::size_type end;
        double sum = 0, current = 0;

        ifstream in("test.txt"); //Datei öffnen
        string *content = new string(istream_iterator<char>(in), istream_iterator<char>()); //Dateiinhalt in String schreiben
        in.close();

        while((begin = content->find(*search, begin)) != string::npos){  //solange bis kein "Ausgabe:S" im string mehr vorhanden ist
                end = content->find(*search, begin + 1);
                istringstream is( content->substr(begin + search->size(), end - (begin + search->size()))); 
                is >> current;  //umwandeln der Zahl die von begin + size("Ausgabe:S") bis end - (begin + size("Ausgabe:S")) in eine double
                sum += current; //aufsummieren der einzelnen Zahlen
                begin += 1;
        }

        cout << sum << endl;
        delete search;
        delete content;
        return 1;
}


Der einzige Nachteil an der Methode ist das sämtliche Leerzeilen + Leerzeichen +
Zeilenumbrüche überlesen werden, aber das sollte in deinem Fall eh keine Rolle spielen.


In diesem Sinne
Gruß

RedWing
 
das Programm läuft soweit...ich bin nur mit der ausgabe nicht zufrieden...der zeigt mir stetig den wert 0 an...woran kann das liegen?
 
Hast du vielleicht die doubles in int o. long umgeschrieben?

Deine Zahlenwerte in der Textdatei sind zu groß für einen Integer bzw long...

Ansonsten sollte das programm funktionieren:

Datei:

Code:
xxx@taco31:~> cat test.txt 
CBEmuIO Version 1.01
CBI4694 V 1.00
Error from:PRT1  - 32:19Error from:PRT1  - 32:65benden mit eingabe von <ende>
 
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575
Ausgabe: S4000868700575

Ausgabe:

Code:
xxx@taco31:~> ./a.out 
9.202e+13

Gruß

RedWing

P.S. Das ergebniss ist gerundet...
 
Zuletzt bearbeitet:
ne ich hab das prog so übernommen wie du es geschrieben hast...
naja das ergebnis stimmt ja auch nicht...es müsst ja laut der textdatei 23 zeilen sein...
 
wenn er mir das ergebnis wenigstens ausgeben würde...aber der gibt immer 0 aus...ich hab dev-c++ als compiler...vielleichts liegst daran...
 
Zurück