Okay, I have this program that needs to read in a file and output the contents in a file with specific parameters. The usage is as follows:
Code:
histogram.exe MaxPages inFileName outFileName
where MaxPages is where the user says how many they want to see, inFileName is the input file, and outFileName is the output file.
An example input would be:
Code:
70.161.31.80 - - [30/Mar/2008:23:31:21 -0500] "GET /cocoon/~cs330web/forum/show/_axle/private.gif HTTP/1.1" 302 -
70.161.31.80 - - [30/Mar/2008:23:31:21 -0500] "GET /cocoon/~cs330web/forum/show/_axle/feed-icon16x16.png HTTP/1.1" 302 -
70.161.31.80 - - [30/Mar/2008:23:31:21 -0500] "GET /axle/Forum/_axle/private.gif HTTP/1.1" 304 -
70.161.31.80 - - [30/Mar/2008:23:31:21 -0500] "GET /axle/Forum/fckeditor/editor/fckeditor.html?InstanceName=text&Toolbar=ForumToolbar HTTP/1.1" 304 -
70.161.31.80 - - [30/Mar/2008:23:31:21 -0500] "GET /axle/Forum/fckeditor/fckconfig.js HTTP/1.1" 304 -
127.0.0.1 - - [30/Mar/2008:23:31:28 -0500] "GET / HTTP/1.0" 200 2499
127.0.0.1 - - [30/Mar/2008:23:31:29 -0500] "GET / HTTP/1.0" 200 2499
I need to take this input and to the output file only the information after GET and either to the end of the line or to a "?"
Now, I currently have these 3 functions to do the stripping of the other information:
To extract the quoted request:
Code:
string extractTheRequest(string logEntry)
{
string::size_type requestStart = logEntry.find('"');
string::size_type requestEnd = logEntry.rfind('"');
if (requestStart != requestEnd)
{
return logEntry.substr(requestStart+1, requestEnd-requestStart-1);
}
else
return "";
}
Check if it's a GET request:
Code:
bool isAGet (string request)
{
return request.size() > 3 && request.substr(0,4) == "GET ";
}
And extract the locator part:
Code:
string extractLocator (string request)
{
// strip off the GET
string::size_type locatorStart = 3;
// Skip any blanks
while (request[locatorStart] == ' ')
++ locatorStart;
// The locator ends at the first blank or ? after that.
string::size_type locatorEnd = locatorStart;
while (request[locatorEnd] != ' ' && request[locatorEnd] != '?')
++ locatorEnd;
string locator = request.substr(locatorStart, locatorEnd-locatorStart);
return locator;
}
I am currently trying to write a function that stores the locator part of the request in 1 array and then counts the times a single locator is found in a second array. (essentially parallel arrays).
I can get the information stored in the arrays but it still has everything before the GET stored too which I don't want. Also, I can't get the counter to work either... Any help would be greatly appreciated! Thanks!