Question

My "counter" is jumping from 1 to 4 when I enter my loop. Any ideas? Code and output below:

    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-Found log format:
-4-cs-uri-stem: 0. cs(Referer): 0. COUNT: 4
-5-cs-uri-stem: 0. cs(Referer): 0. COUNT: 5
-6-cs-uri-stem: 0. cs(Referer): 0. COUNT: 6
-7-cs-uri-stem: 0. cs(Referer): 0. COUNT: 7
-8-cs-uri-stem: 0. cs(Referer): 0. COUNT: 8
-9-cs-uri-stem: 0. cs(Referer): 0. COUNT: 9
-10-cs-uri-stem: 10. cs(Referer): 0. COUNT: 10
-11-cs-uri-stem: 10. cs(Referer): 0. COUNT: 11
-12-cs-uri-stem: 10. cs(Referer): 0. COUNT: 12
-13-cs-uri-stem: 10. cs(Referer): 0. COUNT: 13
-14-cs-uri-stem: 10. cs(Referer): 0. COUNT: 14
-15-cs-uri-stem: 10. cs(Referer): 0. COUNT: 15
-16-cs-uri-stem: 10. cs(Referer): 16. COUNT: 16
-17-cs-uri-stem: 10. cs(Referer): 16. COUNT: 17
-18-cs-uri-stem: 10. cs(Referer): 16. COUNT: 18
-19-cs-uri-stem: 10. cs(Referer): 16. COUNT: 19
-20-cs-uri-stem: 10. cs(Referer): 16. COUNT: 20
Found field cs-uri-stem at position 10.
Found field cs(Referer) at position 16.

Was it helpful?

Solution

I would bet that it's going throught the

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

and you never reset it after this branch

OTHER TIPS

Can't you attach a debugger and step through the code? It doesn't look like you are going to have many iterations to go through to see the answer. (If this Visual Studio you could set a data break point on count at just hit run. I suspect GDB and most other debuggers will also support this.)

You haven't provided all code in your loop - there's an unmatched open curly brace after the while statement. Do you have some cout code below what you've extracted?

Perhaps your if statement right after the while loop begins comes back false? The else attached to that if contains a count++ statement in a loop.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top