Einlesen von Zahlen mit fester Breite



  • Hallo!

    Ich muss Daten einlesen, die im Fortran-Format '8(1PE10.3)' ausgegeben wurden. Mit anderen Worten: jede Zahl ist genau 10 Zeichen breit und in der Form "-0.000E+00" dargestellt, davon stehen jeweils 8 direkt hintereinander. Solange alle positiv sind, kann ich die problemlos mit dem >> Operator einlesen, aber bei negativen Zahlen funktioniert das nicht, weil die vollen 10 Zeichen benötigt werden und somit kein Whitespace zwischen den Zahlen bleibt. Wenn ich mit get arbeite, krieg ich die Daten als C-String, ich brauche aber numerische Werte.
    Außerdem gibt es noch ein Problem: manchmal kommen Werte mit dreistelligen Exponenten vor (das sind zwar immer numerische Artefakte, aber sie sind nun mal da), und damit die in die 10 Stellen passen, fehlt dann das E, also z.B.: "-1.234-101".

    Hat jemand irgendeine kluge Idee, wie Zahlen einlesen kann, ohne alles Zeichen für Zeichen zusammenzufrickeln?



  • Lies immer genau (bzw. maximal) 10 Zeichen als String ein und benutze dann stod zum Umwandeln.

    Nur das fehlende E mußt du dann noch extra behandeln, z.B.

    if (str.size() > 6 && str[6] != 'E')
      str.insert(6, 1, 'E');
    


  • Super, danke, das klingt nachvollziehbar. stod kannte ich noch nicht.


Log in to reply