#include #include #include #include #include #include #include "util/ReadWriter.h" #include "util/rw/MmapReader.h" // g++-mp-4.5 -std=c++0x iraqlog.cpp -I ../common -g -O0 -Wall const char* processline(const char *first, const char *last, StringList& fields) { const char *p= first; bool escaped= false; bool inquotes= false; std::string *str= NULL; while (p=base) return false; number *= base; number += digit; } return true; } // 0123456789abcd // IRQyyyymmddnNN bool datefromurl(const std::string& str, time_t &t, int &id) { if (str.size()<13) return false; if (str[0]!='I' || str[1]!='R' || str[2]!='Q' || str[11]!='n') return false; struct tm tm; memset(&tm, 0, sizeof(tm)); if (!getintfromstr(&str[3], &str[7], 10, tm.tm_year) || !getintfromstr(&str[7], &str[9], 10, tm.tm_mon) || !getintfromstr(&str[9], &str[11], 10, tm.tm_mday) || !getintfromstr(&str[12], str.c_str()+str.size(), 10, id)) { return false; } tm.tm_year-=1900; tm.tm_mon-=1; tm.tm_isdst= -1; t= mktime(&tm); return true; } // 0123456789abcdef012 // yyyy-mm-dd hh:mm:ss bool datefromdate(const std::string& str, time_t &t) { if (str.size()!=19) return false; if (str[4]!='-' || str[7]!='-' || str[13]!=':' || str[16]!=':') return false; struct tm tm; memset(&tm, 0, sizeof(tm)); if (!getintfromstr(&str[0], &str[4], 10, tm.tm_year) || !getintfromstr(&str[5], &str[7], 10, tm.tm_mon) || !getintfromstr(&str[8], &str[10], 10, tm.tm_mday) || !getintfromstr(&str[11], &str[13], 10, tm.tm_hour) || !getintfromstr(&str[14], &str[16], 10, tm.tm_min) || !getintfromstr(&str[17], &str[19], 10, tm.tm_sec)) { return false; } if (tm.tm_sec) { printf("NOTE: date with sec!=0: %s\n", str.c_str()); } tm.tm_year-=1900; tm.tm_mon-=1; tm.tm_isdst= -1; t= mktime(&tm); return true; } // 0123456789abcdef0 // yyyymmddhhmmssXXX bool datefromtrackingnr_type1(const std::string& str, time_t &t, std::string& tag) { if (str.size()!=17) return false; struct tm tm; memset(&tm, 0, sizeof(tm)); if (!getintfromstr(&str[0], &str[4], 10, tm.tm_year) || !getintfromstr(&str[4], &str[6], 10, tm.tm_mon) || !getintfromstr(&str[6], &str[8], 10, tm.tm_mday) || !getintfromstr(&str[8], &str[10], 10, tm.tm_hour) || !getintfromstr(&str[10], &str[12], 10, tm.tm_min)) { return false; } tm.tm_year-=1900; tm.tm_mon-=1; tm.tm_isdst= -1; tag= str.substr(12); t= mktime(&tm); return true; } // 0123456789abcdef0123 // yyyy-DDD-hhmmss-NNNN ( DDD = day of year ) bool datefromtrackingnr_type2(const std::string& str, time_t &t, int& id) { if (str.size()!=20) return false; if (str[4]!='-' || str[8]!='-' || str[15]!='-') return false; struct tm tm; memset(&tm, 0, sizeof(tm)); int yday= 0; if (!getintfromstr(&str[0], &str[4], 10, tm.tm_year) || !getintfromstr(&str[5], &str[8], 10, yday) || !getintfromstr(&str[9], &str[11], 10, tm.tm_hour) || !getintfromstr(&str[11], &str[13], 10, tm.tm_min) || !getintfromstr(&str[13], &str[15], 10, tm.tm_sec) || !getintfromstr(&str[16], str.c_str()+str.size(), 10, id)) { return false; } tm.tm_year-=1900; tm.tm_mon=0; tm.tm_mday=1; tm.tm_isdst= -1; t= mktime(&tm)+86400*(yday-1); return true; } std::string datestr(time_t t) { struct tm tm= *localtime(&t); std::string str; str.resize(19); snprintf(&str[0], 20, "%04d-%02d-%02d %02d:%02d:%02d", tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); return str; } void processfile(const char *first, const char *last) { typedef std::map xref_t; typedef std::vector fieldxref_t; std::vector xrefids= { 4, 5, 10, 11, 14, 31, 32, 33 }; const char *p= first; StringList fieldnames; if (p