Frage zu istream_iterator



  • @dirkski für std::filesystem support muss man unter linux mit dem gcc gegen stdc++fs linken.



  • @firefly sagte in Frage zu istream_iterator:

    @dirkski für std::filesystem support muss man unter linux mit dem gcc gegen stdc++fs linken.

    Jep. Nur hab ich die nicht. Auch nicht im repo:

     5 | devel_gcc                 | GNU Compiler Collection container (openSUSE_Leap_42.3)             | Yes     | (r ) Yes  | No     
    

    Ich muss erst meine suse upgraden, das wiederum geht nicht weil meine Internetanbindung (die normalerweise schon schlecht ist) jetzt quasi nicht mehr funzt. Seit fast 2 Wochen. Normal ist LTE, jetzt nur GPRS 😕 Bin heil froh das ich die cpp-reference hier lokal installiert habe...

    Ich sag jetzt besser nicht wie gut das Forum damit funktioniert.

    Edit: ich habe mit 'ldconfig -p | grep ...' und 'zypper --no-refresh se ...' gesucht, nix

    dirk@schleppi:~/develop/cpp/test/csv_helper> /sbin/ldconfig -p | grep c++
            libstdc++.so.6 (libc6,x86-64) => /usr/lib64/libstdc++.so.6
    

    Noch die alte V6. Die war noch ohne fs. Mein ich, glaub ich. g++ ist aber V8. stdc++ ist glaub V7 aktuell...

    cu



  • So, das eigentliche Thema ist gelöst. std::istreambuf_iterator ist nicht Bidirektional und geht daher nicht mit regex. Falls noch jemand eine Antwort auf die letzte Frage hat (Windows-newline) währe ok, muss aber nicht.

    Eigentlich kann ich das hier jetzt als [solved] markieren, oder?

    cu



  • @dirkski sagte in Frage zu istream_iterator:

    Bei mir klappt das ja, Aber ist unter Windows das linefeed nicht 2 Byte groß? (CR+NL, oder umgekehrt, Schreibmaschinensimulation halt)

    Ja, Windows macht \r\n aka. CR-LF.
    Bei Code der schnell laufen soll hab ich es bisher immer so gemacht alles im "binary" Mode einzulesen und dann den Code der die Daten verarbeitet so angepasst dass er mit allen Varianten klarkommt.



  • @hustbaer sagte in Frage zu istream_iterator:

    @dirkski sagte in Frage zu istream_iterator:

    Bei mir klappt das ja, Aber ist unter Windows das linefeed nicht 2 Byte groß? (CR+NL, oder umgekehrt, Schreibmaschinensimulation halt)

    Ja, Windows macht \r\n aka. CR-LF.
    Bei Code der schnell laufen soll hab ich es bisher immer so gemacht alles im "binary" Mode einzulesen und dann den Code der die Daten verarbeitet so angepasst dass er mit allen Varianten klarkommt.

    Ok, Danke. Also ist '\n' unter Win auch ein Zeichen. Dann brauche ich den Code nicht zu ändern, oder. Hmm, oder erzeugt Win bei "fobar\n" im code intern ein "\r\n". Naja, ist nicht so wichtig. Wollte nur wenn ich schon code ins Forum blase der auch überall läuft... Werde den Puffer einfach auf +2 ändern und oben beim 2. Benchmark-Ergebnis den fertigen Code posten. Nein ich wollte ja noch die read-variante hinzufügen. Dann poste ich das nochmal.

    cu



  • @dirkski sagte in Frage zu istream_iterator:

    @firefly sagte in Frage zu istream_iterator:

    @dirkski für std::filesystem support muss man unter linux mit dem gcc gegen stdc++fs linken.

    Jep. Nur hab ich die nicht. Auch nicht im repo:

     5 | devel_gcc                 | GNU Compiler Collection container (openSUSE_Leap_42.3)             | Yes     | (r ) Yes  | No     
    

    Ich muss erst meine suse upgraden, das wiederum geht nicht weil meine Internetanbindung (die normalerweise schon schlecht ist) jetzt quasi nicht mehr funzt. Seit fast 2 Wochen. Normal ist LTE, jetzt nur GPRS 😕 Bin heil froh das ich die cpp-reference hier lokal installiert habe...

    Ich sag jetzt besser nicht wie gut das Forum damit funktioniert.

    Edit: ich habe mit 'ldconfig -p | grep ...' und 'zypper --no-refresh se ...' gesucht, nix

    dirk@schleppi:~/develop/cpp/test/csv_helper> /sbin/ldconfig -p | grep c++
            libstdc++.so.6 (libc6,x86-64) => /usr/lib64/libstdc++.so.6
    

    Noch die alte V6. Die war noch ohne fs. Mein ich, glaub ich. g++ ist aber V8. stdc++ ist glaub V7 aktuell...

    cu

    Ich glaube du hast da was missverstanden. stdc++fs ist nicht bestandteil der libstdc++.so sondern ist eine separate library (AFAIK aktuell eine static lib *.a). Und diese library ist bestandteil der installation des compilers.
    Da du gcc 8.x installiert hast sollte diese library auch auf deinem system vorhanden sein.

    Beim linken einfach -lstdc++fs angeben.



  • @firefly Jaaa, gefunden. Schwere Geburt. Vielen Dank.

    Erstmal Pause. Zuviel gegessen. Burps.



  • @dirkski sagte in Frage zu istream_iterator:

    Hmm, oder erzeugt Win bei "fobar\n" im code intern ein "\r\n".

    Die String-Literals bleiben schon so wie sie da stehen, "foo\n" ist überall 4 Zeichen lang (5 wenn man die terminierende NUL mitzählt). Es gibt allerdings Magic in den FILE* und iostreams Funktionen wo \r\n zu nur \n übersetzt wird und umgekehrt. Allerdings nur wenn man die Files im "default" (=text) mode aufmacht und nicht im "binary" mode. Welche APIs davon genau betroffen sind und welche nicht weiss ich leider nicht auswendig.

    Nicht betroffen sind auf jeden Fall die seek/tell Funktionen. Sonst müsste seek ja alles lesen was zwischen "hier" und "dort" ist um zu ermitteln wie viele ignorierte "\r" enthalten sind und "abgezogen" werden müssen.

    Alles in allem bin ich kein grosser Fan dieser "automatischen" Übersetzung, weshalb ich im Normalfall nicht damit arbeite.



  • @hustbaer Ok, danke. Wäre das auch geklärt...



  • Benutzt eigentlich überhaupt jemand die istream_iterator und istreambuf_iterator? Also kann man die wirklich für etwas gebrauchen, wo es nicht eine einfachere/effizientere Alternative gibt?



  • @harteware sagte in Frage zu istream_iterator:

    Benutzt eigentlich überhaupt jemand die istream_iterator und istreambuf_iterator? Also kann man die wirklich für etwas gebrauchen, wo es nicht eine einfachere/effizientere Alternative gibt?

    Also ich habe sie noch nie benutzt. Dachte man könnte sie gebrauchen. Einfacher sind sie wenn man sowas wie das Unix-wc schreiben irgendwelche Zeichen zählen will 😉 , siehe oben. Sieht schöner aus. Effizienter? Nein. siehe auch oben...

    cu


Anmelden zum Antworten