JohnnyG62 Ответов: 1

Gnucobol считывает число с десятичной запятой с помощью


Я изучаю КОБОЛ. У меня есть текстовый файл с числовым полем, в котором есть десятичная точка. Я определил это поле как рис. 9 (5)V99. Когда запись читается и поле в виде десятичной точки, я получаю эту ошибку не числовую: ".00". Но если я удалю десятичную точку из поля в этой записи, ошибки не будет. У меня нет возможности запросить файл без десятичной точки в этом поле.

Что я уже пробовал:

Я попробовал использовать рис. 9 (5). 99. Но потом я получаю ошибку компилятора

поле не является числовым значением

Это не проблема с использованием Microfocus cobol.

1 Ответов

Рейтинг:
1

RAMASWAMY EKAMBARAM

Объявление вашего типа переменной как рис. 9 (5).99 кажется совершенно законным - почему компилятор должен отмечать ошибку!

Но если бы вы это сделали
myvar pic 9(5)V99
"V" - это только подразумеваемая десятичная точка-переменная myvar может содержать только цифры.
Кодирование: переместите 147.25 в myvar - это установит myvar в 0014725, и если вы запишете это в текстовый файл, то содержимое будет 0014725, а не 147.25.

Я могу предложить очень уродливое решение, но оно может (в основном будет) работать.

в
отдел данных.
рабочая-складская секция.
01 файл-буфер pic x (8) выровнен справа.
01 Р-файл-буфера переопределяет файл-буфер.
10 f-int-часть рис. 9 (5).
10 наполнитель рис x
10 f-fract-part pic 99.

01 numvar pic 9(5) V99.
01 r-numvar переопределяет numvar.
10 numvar-int рис. 9(5).
10 numvar-fract pic 99.

отдел процедур.
считайте myfile в файловый буфер.
переместите f-int-part в numvar-int.
переместите f-fract-part в numvar-fract.


Прошло более 20 лет с тех пор, как я что-то делал в КОБОЛ.


JohnnyG62

Кто-то показал мне решение этой проблемы. Я хочу задокументировать это на случай, если это поможет другим.

Я изменил картинку для входного файла

LASTSALEAMTIN ПИК Х(13).

Затем я добавил поле в рабочее хранилище
01 LASTSALE PIC 9 (9)V99.

Затем добавил Это в раздел процедур
Переместить функцию NUMVAL (LASTSALEAMTIN) в LASTSALE