2016-07-28 14 views
4

Ich habe Festkommazahlen in Datei, eine in jeder Zeile, in diesem Format S9(6)V9(2), aber wenn sie tatsächlich gelesen werden, bekomme ich non numeric Fehler beim Versuch, sie in Mathematik zu setzen Operationen. Wenn ich versuche, sie im Programm anzuzeigen, wird eine Zahl, die in der Datei 567123.45 geschrieben ist, in der Variablen +567123.04 gespeichert. Und zum Beispiel wird die Nummer aus der Datei 123,45 in der Variablen +123.45.00 gespeichert und verursacht während einer mathematischen Operation den folgenden Fehler 'WS-VALUE' not numeric: '123.45 0'. Warum das? Ich verwende OpenCobolIDE 4.7.4 für Windows.Gleitkommazahlen aus Datei in COBOL lesen

EDIT: Datei hat Aufzeichnungen über die von neuen Linien (gelesen von READ Betrieb eines Rekord nach dem) getrennt folgenden Form:

01 WS-OPERATION. 
    05 WS-ID PIC A(2). 
    05 WS-CLIENT PIC 9(5). 
    05 WS-COUNTRY PIC A(4). 
    05 WS-VALUE PIC S9(6)V9(2). 
+0

Erstens: Dies sind keine Gleitkomma-Elemente, da nur 'NUTZUNG FLOAT ...' Gleitkomma-Elemente sind. Dies sind eigentlich Fixpunkte. Fragen: Welchen Compiler verwenden Sie? Ich gehe davon aus, dass der Standard GnuCOBOL 1.1 geliefert hat - Wenn Sie die Compiler-Pfade geändert haben, finden Sie diese Informationen im Menü? -> Über OpenCobolIDE. Wie liest man die Datei, wie sieht die Datei und ihre Datensatzbeschreibung aus? Wie sieht die 'DISPLAY'-Anweisung aus? –

+0

Ja, ich benutze Version 1.1.0. Ich habe den Beitrag über die Dateistruktur bearbeitet. – Quentin

+0

Ich schlage vor, den "Fließkomma" -Teil auch auf "Festkomma" zu bearbeiten. –

Antwort

5

Der Grund dafür ist, dass Sie versuchen, un-bearbeiten ein Feld. 567123.45 in den Daten entspricht nicht PIC S9(6)V9(2) sondern -9(6).9(2). - interne gespeicherte Daten vs. Druckdaten.

einfach die Definition ändern und verwenden MOVE WS-VALUE TO WS-VALUE-INTERNAL (was, wie Sie definiert wollen) Arbeit mit einem bestimmten Compiler kann (und spezifische Daten), aber ich würde einen anderen Weg gehen:

Ich würde vorschlagen validieren Sie immer die Daten, bevor Sie etwas damit machen (die Datei kann beschädigt oder extern bearbeitet werden). Überprüfen Sie zumindest die einfachen numerischen Daten wie WS-CLIENT für IS NUMERIC und führen Sie entweder eine vollständige Validierung für das Datenfeld WS-VALUE durch oder verwenden Sie mindestens MOVE FUNCTION NUMVAL(WS-VALUE) TO WS-VALUE-INTERNAL.