STL String parsen in chrono
-
Moin Sportfreunde
ich suche einen (performanten) Weg einen STL-String in einen Chrono-TimePoint (oder ähnlich ) zu parsen.
Bisher habe ich eigentlich nur StringStream-verwandte Varianten gefunden, die ich persönlich nicht verwenden möchte weil die StringStream-Performance meiner Erfahrung nach zu schlecht ist.
Getestet habe ich die StringStreams vor einiger Zeit am Beispiel String -> Int. Da war StringStream konsequent die schlechteste Variante. ( neben "atol", "std::stoi" ).Ideen?
gruß Tobi
-
Naja pars' das Ding halt einfach.
Gibt jastd::from_chars
. Der Rest ist ein bisschenif
und ein bisschen Arithmetik.
-
@hustbaer sagte in STL String parsen in chrono:
Naja pars' das Ding halt einfach.
Gibt jastd::from_chars
. Der Rest ist ein bisschenif
und ein bisschen Arithmetik.Ich hatte halt gedacht, bei der Entwicklung von Chrono hat man an sowas schon gedacht, aber scheinbar irgendwie nicht. Ist vermutlich ne ganz exotische Anforderung, die ich hier habe
-
std::chrono::parse ist bekannt?
https://en.cppreference.com/w/cpp/chrono/parseWobei das wohl kein timepoint erstellen kann
-
@firefly sagte in STL String parsen in chrono:
std::chrono::parse ist bekannt?
https://en.cppreference.com/w/cpp/chrono/parseWobei das wohl kein timepoint erstellen kann
Wobei parse scheinbar nur mit streams arbeitet, wenn ich das richtig verstanden habe. Genau das will ich vermeiden. Ich habe einen STL String und möchte den nicht noch extra dafür in einen Stream schieben, um ihn dann hinterher wieder rauszupopeln.
-
Ist Performance denn in diesem Fall bei dir wirklich ein Problem? Wie viele Datumswerte hast du denn, dass das relevant ist? Und wenn du sehr sehr viele Werte hast, ist möglicherweise sowieso ein Parsen speziell für dein Format schneller als eines, wo erst noch der Format-String ausgewertet werden muss (ich weiß nicht, wie optimiert das parse ist, ob da bei zur Compilezeit bekanntem Formatstring der Parse-Algorithmus schon angepasst wird).
-
stimmt der "std::string" ist hier nur für den format string da.
-
@wob sagte in STL String parsen in chrono:
ich weiß nicht, wie optimiert das parse ist, ob da bei zur Compilezeit bekanntem Formatstring der Parse-Algorithmus schon angepasst wird
Ziemlich sicher nicht. Aber Format-Strings Parsen geht normalerweise relativ schnell. Das wäre sicher nicht das Problem.
@It0101
Was du machen könntest wäre einen eigenen Stream-Buffer zu implementieren - z.B. einen der die Werte direkt aus einemstd::string
liest ohne denstd::string
zu kopieren.Bzw. Boost hat da auch schon was fertiges, siehe z.B. https://stackoverflow.com/questions/15322045/can-i-init-a-iostream-from-a-buffer-without-copying-it
-
@hustbaer sagte in STL String parsen in chrono:
@wob sagte in STL String parsen in chrono:
ich weiß nicht, wie optimiert das parse ist, ob da bei zur Compilezeit bekanntem Formatstring der Parse-Algorithmus schon angepasst wird
Ziemlich sicher nicht. Aber Format-Strings Parsen geht normalerweise relativ schnell. Das wäre sicher nicht das Problem.
@It0101
Was du machen könntest wäre einen eigenen Stream-Buffer zu implementieren - z.B. einen der die Werte direkt aus einemstd::string
liest ohne denstd::string
zu kopieren.Bzw. Boost hat da auch schon was fertiges, siehe z.B. https://stackoverflow.com/questions/15322045/can-i-init-a-iostream-from-a-buffer-without-copying-it
In dem Fall ist es sicher einfacher wenn ich den string, wie von dir vorgeschlagen, wirklich selber parse zumal das Format, dass ich geliefert bekomme tatsächlich nur "hhmmsszzz" ist... also Uhrzeit mit Millisekunden.