Bestimmte character in input stream ignorieren
-
Ich habe eine Frage bezüglich input streams. Ist es möglich einem istream_basic beizubringen bestimmte Character zu ignorieren?
Hintergrund ist folgender: boost hat in Version 1.59 eingeführt, dass der JSON-Parser für die Property-Trees konformer geworden ist. Er unterstützt jetzt z.B. keine line-breaks in Strings mehr. Das fand ich aber eigentlich ganz nützlich und habe es verwendet um z.B. Tabellen strukturiert zu erfassen. Im einfachsten Fall dachte ich mir ich gebe jetzt dem JSON-Parser einen Stream und der meckert beim lesen dann nicht, weil die breaks vorher rausgefiltert wurden und er sie gar nicht erst sieht. Ist sowas mit vertretbarem Aufwand möglich?
Natürlich kann ich mir einen eigenen Stream schreiben, aber das wäre Overkill ggü. der Variante einfach meine Inputs konform zu machen. Wenn es also nicht mit ein paar Zeilen magischem Code geht, dann vergesse ich das ganz schnell ;-).
-
Boost.Iostreams bietet gefilterte Streams. Vielleicht geht's damit.
-
Danke, das sieht vom Ansatz her genau richtig aus. Jetzt muss ich nur noch rausfinden, wie ich es verwende. Die Doku ist an der Stelle etwas komisch aufgebaut.
-
Hallo,
Man könnte auch einen eigenen streambuf nehmen (abgeleitet von std::streambuf). Dort überschreibt man underflow und/oder uflow und implementiert dort den Filter.
Beispiele dazu gibt es z. Bsp. hier
https://www.c-plusplus.net/forum/215640
https://www.c-plusplus.net/forum/291317
-
Danke, das sieht ziemlich gut aus. Kommentare wären auch eine nette Erweiterung für meine Inputs. Werde ich direkt mit einbauen
.