Ich habe Protokolldaten von 1000 bis 100000 Einträge alle aus verschiedenen Quellen. Ziel ist es, diese Daten nach Zeit (schnell) zu sortieren. Ich war Prototyping in C und ich bin fest, weil es aussieht wie tm nicht Millisekunden unterstützt. Fehle ich hier etwas? Irgendwelche Vorschläge ?time.h - Struktur tm und Millisekunden
Idee:
Datei öffnen. Parsen zeilenweise und tokenisieren Felder in c struct über strtok
1.1 Konvertieren Datum & Zeit zu "struct tm".
1.2 Build verkettete Liste
- Sortieren verkettete Liste basierend auf Zeit (nicht wissen, welche Art Algorithmus ich verwenden würde)
- Ausgang
[Beispiel]
YYYY-MM-DD,HH:MM:SS:MS , PID, TID , COMPONENT, Message
2017-03-29,20:56:27:088, 3436,2568,COMPONENT, Message String blah blah
2017-03-29,20:56:27:089, 3436,2568,COMPONENT, Message String baaaaa
2017-03-29,20:56:27:079, 3436,2568,COMPONENT, Message String roarrr
2017-03-29,20:56:28:061, 3436,2568,COMPONENT, Message String meow
2017-03-29,20:56:25:044, 3436,2568,COMPONENT, Message String ruff ruff
.
.
.
100000 entries
const char T[] = "2017-03-29,20:56:27:088"; //Test String
time_t result = 0;
int year = 0, month = 0, day = 0;
int hour = 0, min = 0, sec = 0, ms = 0;
if (sscanf(T, "%4d-%2d-%2d,%2d:%2d:%2d", &year, &month, &day, &hour, &min, &sec) == 6) {
struct tm tv = {0};
tv.tm_year = year;
tv.tm_mon = month;
tv.tm_mday = day;
tv.tm_hour = hour;
tv.tm_min = min;
tv.tm_sec = sec;
//Crap, it doesn't look like tm handles milliseconds ????
if ((result = mktime(&tv)) == (time_t)-1) {
fprintf(stderr, "Conversion Error\n");
}
puts(ctime(&result));
}
else {
fprintf(stderr, "Invalid Format\n");
}
C++ hat eine [chrono's high_resolution_clock] (http://en.cppreference.com/w/cpp/chrono/high_resolution_clock), deren Dauer Sie Millisekunden so einfach wie _ _ "A, B, C, 1, 2 , 3"_. Denken Sie darüber nach, das 'C++' - Tag aus Ihrer C-Frage zu entfernen. Sie sind zwei verschiedene Sprachen. – Ron
Verwenden Sie C oder C++? Sie sind verschiedene Sprachen. – NathanOliver
Überprüfen Sie Repo: https://github.com/izaak-coleman/chronoBench. Wenn Sie C++ verwenden können, können Sie dies verwenden. –