2015-03-03 8 views
0

У меня есть программа COBOL, для которой требуется номер транзакции для каждого запуска программы. Я планирую получить последний номер транзакции из файла и добавить 1 к нему. Проблема в том, что я не знаю, как получить последнее записанное значение.Чтение последней записи файла

IDENTIFICATION DIVISION. 
PROGRAM-ID. INVENTORY-SYS. 
AUTHOR. LINSEY. 
DATE-WRITTEN. 2/22/2015. 
DATE-COMPILED. 2/22/2015. 

ENVIRONMENT DIVISION. 
CONFIGURATION SECTION. 
INPUT-OUTPUT SECTION. 
    FILE-CONTROL. 
    SELECT MASTER-FILE ASSIGN TO "inventory-file.txt" 
    ORGANIZATION IS LINE SEQUENTIAL. 

DATA DIVISION. 
FILE SECTION. 
FD MASTER-FILE. 
01 IN-RECORDS. 
    02 IN-CODE PIC 9(7). 
    02 IN-NAME PIC X(30). 
    02 IN-PRICE PIC 9(3). 
    02 IN-STOCK PIC 9(4). 

WORKING-STORAGE SECTION. 
01 WS-EOF PIC A(1). 

PROCEDURE DIVISION. 
100-READ-FILE. 
OPEN I-O MASTER-FILE. 
PERFORM UNTIL WS-EOF = "Y" 
READ MASTER-FILE 
AT END 
     MOVE 'Y' TO WS-EOF 
NOT AT END 
    DISPLAY IN-RECORDS 
END-READ 
END-PERFORM 
CLOSE MASTER-FILE. 
STOP RUN. 

Это пример программы. Проблема заключается в том, что извлекает все записи из файла я только последняя запись из «инвентарного-file.txt»

ответ

0

Ну, вы настойчивы, так:

IDENTIFICATION DIVISION. 
PROGRAM-ID. INVENTORY-SYS. 

ENVIRONMENT DIVISION. 
CONFIGURATION SECTION. 
INPUT-OUTPUT SECTION. 
    FILE-CONTROL. 
    SELECT MASTER-FILE ASSIGN TO "inventory-file.txt" 
    ORGANIZATION IS LINE SEQUENTIAL 
    FILE STATUS IS w-if-in-file-status. 

DATA DIVISION. 
FILE SECTION. 
FD MASTER-FILE. 
01 IN-RECORDS. 
    02 IN-CODE PIC 9(7). 
    02 IN-NAME PIC X(30). 
    02 IN-PRICE PIC 9(3). 
    02 IN-STOCK PIC 9(4). 

WORKING-STORAGE SECTION. 
01 w-if-in-file-status PIC XX. 
    88 master-file-status-good VALUE ZERO "10". 
    88 end-of-master-file VALUE "10". 
01 w-save-code PIC 9(7). 

PROCEDURE DIVISION. 
    OPEN INPUT MASTER-FILE 
    [code to check FILE STATUS field] 
    PERFORM UNTIL end-of-master-file 
     READ MASTER-FILE 
     [code to check FILE STATUS field] 
     MOVE IN-CODE to w-save-code 
    END-PERFORM 
    DISPLAY ">" w-save-code "<" 
    CLOSE MASTER-FILE 
    [code to check FILE STATUS field] 
    GOBACK 
    . 

Я не знаю, почему ваш Поле IN-CODE является числовым. Собираетесь ли вы с этим делать расчеты?


Вы сохраняете контрольный файл. Это имеет дату (в соответствии с файлом бизнес-даты) логическое имя файла, среду и последний номер транзакции.

Вы поддерживаете этот файл, проверяя все, как вы это делаете.

+0

Я уже сделал это. сэр мой вопрос, как я могу получить последнюю запись из файла. используя ОРГАНИЗАЦИЮ ПОСЛЕДОВАТЕЛЬНО. –

+0

Когда вы закончите с номерами транзакций за день, вы обновите файл управления. Вы не читаете файл специально для этого, вы делаете это одновременно с обработкой функций. Как, в противном случае, вы обеспечили бы, чтобы вы читали правильный файл, в правильной среде, в нужное время и т. Д.? –

+0

нет сэр, эта сделка не является повседневной. каждый раз, когда программа запускает номер транзакции, необходимо обновить. example sir 00001 - это первое число транзакций после запуска программы, которое будет сохранено в другом файле. когда пользователь снова запускает программу, номер транзакции должен быть 00002. Я могу сделать это только в том случае, если я могу получить последнюю транзакцию и добавить 1 к ней, когда я запускаю программу во второй раз –

0

Я не уверен, что OpenCobol поддерживает его, но вы можете попробовать использовать OPEN/REVERSED. Это старый школьный способ чтения ленты назад, или в эти дни, виртуальной ленты. Я понятия не имею, реализовано ли это, но это простой способ прочитать последовательный файл назад.