Frage

Mein „counter“ springt von 1 bis 4, wenn ich meine Schleife ein. Irgendwelche Ideen? Code und Ausgabe unter:

    static bool harvestLog()
{
    ifstream myFile("LOGS/ex090716.log");
    if (myFile.fail()) {cout << "Error opening file";return 1;}
    else
    {
        cout << "File opened... \n";
        string line;
        string field;
        int cs_uri_stemLocation = 0;
        int csReferrerLocation = 0;
        int count = 1;
        cout << "-" << count << "-";
        while( getline(myFile, line) ) {
            if ( strstr(line.c_str(), "cs-uri-stem") &&
                (strstr(line.c_str(), "cs(Referer)") || strstr(line.c_str(), "cs(Referrer)")) )
            {
                cout << "-" << count << "-";
                cout << "Found log format: \n";
                istringstream foundField(line);
                while (!foundField.eof())
                {
                    cout << "-" << count << "-";
                    foundField >> field;
                    if (field == "cs-uri-stem") {cs_uri_stemLocation = count;}
                    if (field == "cs(Referer)" || field == "cs(Referrer)") {csReferrerLocation = count;}
                    cout << "cs-uri-stem: " << cs_uri_stemLocation << ". ";
                    cout << "cs(Referer): " << csReferrerLocation << ". ";
                    cout << "COUNT: " << count << endl;
                    count++;
                }
                cout << "Found field cs-uri-stem at position " << cs_uri_stemLocation << "." << endl;
                cout << "Found field cs(Referer) at position " << csReferrerLocation << "." << endl;
                count = 1;
            }
            else
            {
                count = 1;
                istringstream foundField(line);
                while (!foundField.eof())
                {
                    foundField >> field;
                    //if (count == cs_uri_stemLocation) cout << field << endl;
                    count++;
                }

                //cmatch results;
                //regex rx("(?:p|q)(?:=)([^ %]*)");
                //regex_search(line.c_str(), results, rx);
                //string referringWords = results[1];

                //cout << referringWords;
            }
        }
    myFile.close();
    return 0;
    }
}
  

-1--4-Gefunden Protokollformat:
  -4-cs-uri-Stamm: 0. cs (Referer): 0. COUNT: 4
  -5-cs-uri-Stamm: 0. cs (Referer): 0. COUNT: 5
  -6-cs-uri-Stamm: 0. cs (Referer): 0. COUNT: 6
  -7-cs-uri-Stamm: 0. cs (Referer): 0. COUNT: 7
  -8-cs-uri-Stamm: 0. cs (Referer): 0. COUNT: 8
  -9-cs-uri-Stamm: 0. cs (Referer): 0. COUNT: 9
  -10-cs-uri-Stamm: 10 cs (Referer): 0. COUNT: 10
  -11-cs-uri-Stamm: 10 cs (Referer): 0. COUNT: 11
  -12-cs-uri-Stamm: 10 cs (Referer): 0. COUNT: 12
  -13-cs-uri-Stamm: 10 cs (Referer): 0. COUNT: 13
  -14-cs-uri-Stamm: 10 cs (Referer): 0. COUNT: 14
  -15-cs-uri-Stamm: 10 cs (Referer): 0. COUNT: 15
  -16-cs-uri-Stamm: 10 cs (Referer): 16. COUNT: 16
  -17-cs-uri-Stamm: 10 cs (Referer): 16. COUNT: 17
  -18-cs-uri-Stamm: 10 cs (Referer): 16. COUNT: 18
  -19-cs-uri-Stamm: 10 cs (Referer): 16. COUNT: 19
  -20-cs-uri-Stamm: 10 cs (Referer): 16. COUNT: 20
  Gefunden Feld cs-uri-stem an Position 10.
  Gefunden Feld cs (Referer) an Position 16

War es hilfreich?

Lösung

Ich würde wetten, dass es geht durch die

                        while (!foundField.eof())
                        {
                                foundField >> field;
                                //if (count == cs_uri_stemLocation) cout << field << endl;
                                count++;
                        }

und Sie es nie nach diesem Zweig zurückgesetzt

Andere Tipps

Können Sie nicht einen Debugger anhängen und Schritt durch den Code? Es sieht nicht so aus, wie Sie viele Iterationen gehen zu müssen, bis hin zu gehen, um die Antwort zu sehen. (Wenn diese Visual Studio Sie einfach auf Lauf einen Datenhaltepunkt auf Zahl einstellen könnte. Ich vermute, GDB und die meisten anderen Debugger wird auch dies unterstützen.)

Sie haben nicht die gesamten Code in der Schleife zur Verfügung gestellt - es gibt eine nicht angepaßte offene geschweifte Klammer nach der while-Anweisung. Haben Sie etwas cout Code unten, was Sie extrahiert haben?

Vielleicht ist Ihre if-Anweisung direkt nach der while-Schleife beginnt kommt wieder falsch? Die sonst an, dass, wenn enthält eine Zählung ++ Anweisung in einer Schleife.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top