討論區快速選單
知識庫快速選單
傑米的攝影旅遊筆記 政府補助!學嵌入式+物聯網 程式設計俱樂部Facebook粉絲團
[ 回上頁 ] [ 討論區發言規則 ]
INDEX FILE 的問題
更改我的閱讀文章字型大小
作者 : cmc0610(670610)
[ 貼文 22 | 人氣 9501 | 評價 0 | 評價/貼文 0 | 送出評價 21 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/6/12 上午 12:19:50
想試一下同時存取一個檔案
可是程式只跑到 OPEN I-O IDX-FILE 就「意外身亡」了...
為什麼....請告訴我.......謝謝!!!!
PS:編譯器是RM/COBOL V7.0 FOR WIN.........
     IDENTIFICATION DIVISION.
     PROGRAM-ID. IDXTEST.
     ENVIRONMENT DIVISION.
     INPUT-OUTPUT SECTION.
     FILE-CONTROL.
     SELECT IDX-FILE ASSIGN TO RANDOM "D:\COBTEST\INDEX.IDX"
     ORGANIZATION IS INDEXED
     ACCESS MODE IS DYNAMIC
     RECORD KEY IS IDX-NO
     FILE STATUS IS WK-F.
     DATA DIVISION.
     FILE SECTION.
     FD IDX-FILE LABEL RECORDS ARE STANDARD.
     01 IDX-REC.
     05 IDX-NO PIC X(05).
     05 IDX-NAME PIC X(10).
     WORKING-STORAGE SECTION.
     01 WK-F PIC X(02) VALUE "00".
     01 WK-CONTINUE PIC X VALUE "Y".
     88 WK-Y VALUE "y" "Y".
     88 WK-N VALUE "n" "N".
     PROCEDURE DIVISION.
     IDX-BEGIN.
     DISPLAY SPACES LINE 1 POSITION 1 ERASE EOS.
     OPEN I-O IDX-FILE.
     IF WK-F NOT = "00"
     DISPLAY "FILE OPEN ERROR : " WK-F
     LINE 10 POSITION 20
     ELSE
     PERFORM IDX-ACCEPT THRU IDX-ACCEPT-EXIT
     UNTIL WK-N.
     CLOSE IDX-FILE.

     STOP RUN.

     IDX-ACCEPT.
     DISPLAY "ROOM NO :" LINE 10 POSITION 10.
     ACCEPT IDX-NO LINE 10 POSITION 20 TAB NO BEEP.
     DISPLAY "ROOM NAME :" LINE 11 POSITION 10.
     ACCEPT IDX-NAME LINE 11 POSITION 22 TAB NO BEEP.
     WRITE IDX-REC
     INVALID KEY DISPLAY "WRITE ERROR ..."
     LINE 18 POSITION 20.
     DISPLAY "CONTINUE ? (Y/N) " LINE 22 POSITION 20.
     ACCEPT WK-CONTINUE LINE 22 POSITION 37 TAB.
     DISPLAY SPACES LINE 1 POSITION 1 ERASE EOS.
     IDX-ACCEPT-EXIT.
     EXIT.
作者 : whitlock(阿強)
[ 貼文 63 | 人氣 1302 | 評價 310 | 評價/貼文 4.92 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人cmc0610註記此篇回應為最佳解答 2005/6/13 下午 10:05:56
如果沒猜錯應該是你的檔案不存在D槽所以你I-O時就會有問題
你可以在OPEN I-O XXXX時前面加入
OPEN OUTPUT XXXXX.
CLOSE XXXX.
再去編譯一次後-->跑過程式產生檔案後-->再把上面那二句拿掉-->再重新編譯一次就不會發生

如果不想要那麼複雜的話可以找書一下看有關DCLERATE的方式就OK了
作者 : knifour(小毛)
[ 貼文 102 | 人氣 894 | 評價 390 | 評價/貼文 3.82 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人cmc0610註記此篇回應為最佳解答 2005/6/14 上午 11:46:10

>如果沒猜錯應該是你的檔案不存在D槽所以你I-O時就會有問題
>你可以在OPEN I-O XXXX時前面加入
>OPEN OUTPUT XXXXX.
>CLOSE XXXX.
>再去編譯一次後-->跑過程式產生檔案後-->再把上面那二句拿掉-->再重新編譯一次就不會發生
>
>如果不想要那麼複雜的話可以找書一下看有關DCLERATE的方式就OK了

這種方式每次執行都會把舊資料洗掉
最好的方法是把

SELECT IDX-FILE ASSIGN TO RANDOM "D:\COBTEST\INDEX.IDX"

改成

SELECT OPTIONAL IDX-FILE ASSIGN TO RANDOM "D:\COBTEST\INDEX.IDX"

他會自動判斷該檔案存不存在, 若不存在會建新檔, 若存在則會開啟
注意! 如果你用 OPEN INPUT 方式開啟, 若檔案不存在, 一率都會出現錯誤訊息

PS: 我用的是 RM/COBOL 85, 我不確定 7.0 是否支援此用法
作者 : cmc0610(670610)
[ 貼文 22 | 人氣 9501 | 評價 0 | 評價/貼文 0 | 送出評價 21 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/6/14 下午 12:18:17
不好意思......您的意思是說.
檔案必須存在才能用OPEN I-O XXXX開啟嗎...???
作者 : cmc0610(670610)
[ 貼文 22 | 人氣 9501 | 評價 0 | 評價/貼文 0 | 送出評價 21 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/6/14 下午 12:22:41

>
>>如果沒猜錯應該是你的檔案不存在D槽所以你I-O時就會有問題
>>你可以在OPEN I-O XXXX時前面加入
>>OPEN OUTPUT XXXXX.
>>CLOSE XXXX.
>>再去編譯一次後-->跑過程式產生檔案後-->再把上面那二句拿掉-->再重新編譯一次就不會發生
>>
>>如果不想要那麼複雜的話可以找書一下看有關DCLERATE的方式就OK了
>
>這種方式每次執行都會把舊資料洗掉
>最好的方法是把
>
>SELECT IDX-FILE ASSIGN TO RANDOM 'D:\COBTEST\INDEX.IDX'
>
>改成
>
>SELECT OPTIONAL IDX-FILE ASSIGN TO RANDOM 'D:\COBTEST\INDEX.IDX'
>
>他會自動判斷該檔案存不存在, 若不存在會建新檔, 若存在則會開啟
>注意! 如果你用 OPEN INPUT 方式開啟, 若檔案不存在, 一率都會出現錯誤訊息
>
>PS: 我用的是 RM/COBOL 85, 我不確定 7.0 是否支援此用法
>
我改成
SELECT OPTIONAL IDX-FILE ASSIGN TO RANDOM 'D:\COBTEST\INDEX.IDX......
....而且我也用了和你一樣的編譯器.......可是它告訴我....
***** 1) E 98: NONNUMERIC LITERAL TERMINATION (SCAN SUPPRESSED) *E*E*E*E*E*E
why????????
作者 : whitlock(阿強)
[ 貼文 63 | 人氣 1302 | 評價 310 | 評價/貼文 4.92 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人cmc0610註記此篇回應為最佳解答 2005/6/14 下午 01:46:35
E 98:NONNUMERIC LITERAL TERMINATION
非數值定字不被編譯程式視為連續,因無右引號標記(closing quotatoin mark)當作定字的結束

我改了的程式加了 DECLARATIVES.
     IDENTIFICATION DIVISION.
     PROGRAM-ID. IDXTEST.
     ENVIRONMENT DIVISION.
     INPUT-OUTPUT SECTION.
     FILE-CONTROL.
     SELECT IDX-FILE
     ASSIGN TO RANDOM "D:\COBTEST\INDEX.IDX"
     ORGANIZATION IS INDEXED;
     ACCESS MODE IS DYNAMIC;
     RECORD KEY IS IDX-NO;
     FILE STATUS IS WK-F.

     DATA DIVISION.
     FILE SECTION.
     FD IDX-FILE LABEL RECORDS ARE STANDARD.
     01 IDX-REC.
     05 IDX-NO PIC X(05).
     05 IDX-NAME PIC X(10).
     WORKING-STORAGE SECTION.
     01 WK-F PIC X(02) VALUE "00".
     01 WK-CONTINUE PIC X VALUE "Y".
     88 WK-Y VALUE "y" "Y".
     88 WK-N VALUE "n" "N".
     PROCEDURE DIVISION.
> *------------------------------------------------------------*
> * 列外處理.
> *------------------------------------------------------------*
> DECLARATIVES.
> 000-FILE-STATUS SECTION.
> USE AFTER STANDARD ERROR PROCEDURE ON I-O.
> 000-ERROR-FILE.
> OPEN OUTPUT IDX-FILE.
> CLOSE IDX-FILE.
> 000-EXIT.
> EXIT.
> END DECLARATIVES.
     *------------------------------------------------------------*
     IDX-BEGIN.
     DISPLAY SPACES LINE 1 POSITION 1 ERASE EOS.
     OPEN I-O IDX-FILE.
     IF WK-F NOT = "00"
     DISPLAY "FILE OPEN ERROR : " WK-F
     LINE 10 POSITION 20
     ELSE
     PERFORM IDX-ACCEPT THRU IDX-ACCEPT-EXIT
     UNTIL WK-N.
     CLOSE IDX-FILE.

     STOP RUN.

     IDX-ACCEPT.
     DISPLAY "ROOM NO :" LINE 10 POSITION 10.
     ACCEPT IDX-NO LINE 10 POSITION 20 TAB NO BEEP.
     DISPLAY "ROOM NAME :" LINE 11 POSITION 10.
     ACCEPT IDX-NAME LINE 11 POSITION 22 TAB NO BEEP.
     WRITE IDX-REC
     INVALID KEY DISPLAY "WRITE ERROR ..."
     LINE 18 POSITION 20.
     DISPLAY "CONTINUE ? (Y/N) " LINE 22 POSITION 20.
     ACCEPT WK-CONTINUE LINE 22 POSITION 37 TAB.
     DISPLAY SPACES LINE 1 POSITION 1 ERASE EOS.
     IDX-ACCEPT-EXIT.
     EXIT.
作者 : knifour(小毛)
[ 貼文 102 | 人氣 894 | 評價 390 | 評價/貼文 3.82 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人cmc0610註記此篇回應為最佳解答 2005/6/14 下午 06:01:57
>我改成
>SELECT OPTIONAL IDX-FILE ASSIGN TO RANDOM ''D:\COBTEST\INDEX.IDX......
>....而且我也用了和你一樣的編譯器.......可是它告訴我....
>***** 1) E 98: NONNUMERIC LITERAL TERMINATION (SCAN SUPPRESSED) *E*E*E*E*E*E
>why????????
>

會出現這個錯誤的原因, 是因為你的程式已經超過第72個字了
複習一下 : A區: 8-11字
     B區: 12-72字
因為檔名的地方超過第72字, 所以編譯器認定你沒有右引號, 而出現這個錯誤
建議你改寫成:
SELECT OPTIONAL IDX-FILE
ASSIGN TO RANDOM 'D:\COBTEST\INDEX.IDX'
把他分行就不會超過第72個字了

這種寫法, 你只要用 OPEN I-O 模式開檔, 他就會自動判斷檔案存不存在
以前 ANSI COBOL 74 並不支援這種寫法
作者 : knifour(小毛)
[ 貼文 102 | 人氣 894 | 評價 390 | 評價/貼文 3.82 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人cmc0610註記此篇回應為最佳解答 2005/6/14 下午 06:06:08
另外 whitlock 大大的寫法應該要好好參考一下
DECLARATIVES.(宣告節)是COBOL裡面很重要的部分
應該要好好學習起來
作者 : cmc0610(670610)
[ 貼文 22 | 人氣 9501 | 評價 0 | 評價/貼文 0 | 送出評價 21 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/6/19 上午 01:15:36
Q1...試了一下有一個錯誤...在END DECLARATIVES.之後要有一個section....
    所以我給它一個MAIN SECTION.但是在資料輸入第一筆後發現程式自動結束
     訊息如下
COBOL I/O error 48,02 on IDX-FILE file D:\COBTEST\INDEX.IDX
COBOL I/O error at line 57 in IDXTEST (D:\COBTEST\IDXTEST.COB) compiled

Q2請問無法輸入中文的問題有辦法解決嗎.......???

Q3我本來是想讓程式在輸入資料的同時能比對是否輸入重複的關鍵資料(例如 ROOM NO)
    並且在輸入後將新資料和舊資料合併,使用INDEX FILE來暫存新資料的方式是否恰當????

Q4..COBOL 因為是我自己看書學的所以程度很差....沒學過DECLARATIVES...請問那是做啥用的?如何使用?應該在何狀況使用????

作者 : whitlock(阿強)
[ 貼文 63 | 人氣 1302 | 評價 310 | 評價/貼文 4.92 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人cmc0610註記此篇回應為最佳解答 2005/6/20 下午 12:22:57
因為書沒帶在身上沒法查一下COBOL錯誤 應是是重覆KEY值的問題
因為我是用ACU在編譯所以跟你用的RMCOBOL會有誤差至放中文解決問題
我之前有用過試用版的軟體就漢書DOS模擬系統可以解決2000以上使用COBOL的問題但是軟體要錢我之前測試時是用測試版再加上破解30天試天期的軟體搭配使用但是1.2版時吃資源很重啦後來就用別了但是對於學習來說應該沒有感覺啦
至於DECLARATIVES有點像很多程式的例外處理(有錯請指正)很多是自己推測的程式架構學校教的不多工作上累積出來的
如果真的是重覆KEY值的話你的程式可能在輸入NO時要先去讀取IDX-FILE裡有沒有資料當有
資料時你只能使用REWRITE不能用WRITE.....先試看看吧想不出來我再寫給你參考大家互相學習

DOS模擬軟體 --> 大方資訊
作者 : ysl561(ysl561)
[ 貼文 14 | 人氣 5 | 評價 140 | 評價/貼文 10 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人cmc0610註記此篇回應為最佳解答 2005/6/20 下午 03:44:01
48,02是沒開啟檔案,就要寫入資料
應該是開檔沒成功
作者 : knifour(小毛)
[ 貼文 102 | 人氣 894 | 評價 390 | 評價/貼文 3.82 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人cmc0610註記此篇回應為最佳解答 2005/6/23 上午 11:42:24

>Q1...試了一下有一個錯誤...在END DECLARATIVES.之後要有一個section....
> 所以我給它一個MAIN SECTION.但是在資料輸入第一筆後發現程式自動結束
> 訊息如下
>COBOL I/O error 48,02 on IDX-FILE file D:\COBTEST\INDEX.IDX
>COBOL I/O error at line 57 in IDXTEST (D:\COBTEST\IDXTEST.COB) compiled


把 mail 留給我, 我把範例及解說寄給你看
討論區不能排版, 有一點麻煩
排版好的程式, 一貼上就亂掉了

我的信箱:knifour.home@msa.hinet.net
作者 : cmc0610(670610)
[ 貼文 22 | 人氣 9501 | 評價 0 | 評價/貼文 0 | 送出評價 21 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/6/24 下午 08:35:52

>
>>Q1...試了一下有一個錯誤...在END DECLARATIVES.之後要有一個section....
>> 所以我給它一個MAIN SECTION.但是在資料輸入第一筆後發現程式自動結束
>> 訊息如下
>>COBOL I/O error 48,02 on IDX-FILE file D:\COBTEST\INDEX.IDX
>>COBOL I/O error at line 57 in IDXTEST (D:\COBTEST\IDXTEST.COB) compiled
>
>
>把 mail 留給我, 我把範例及解說寄給你看
>討論區不能排版, 有一點麻煩
>排版好的程式, 一貼上就亂掉了
>
>我的信箱:knifour.home@msa.hinet.net

我ㄉ e-mail : 670610@yahoo.com.tw
3q!....^^
作者 : oldcobol(lyf)
[ 貼文 7 | 人氣 1 | 評價 40 | 評價/貼文 5.71 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人cmc0610註記此篇回應為很有道理 2005/6/28 下午 04:59:55
可能是index file 亂掉, 可產生另一個空檔後, 用它的index file 去 修復原本的index,
但要確定你用的 cobol版本有 reindex的程式喔!!
作者 : cmc0610(670610)
[ 貼文 22 | 人氣 9501 | 評價 0 | 評價/貼文 0 | 送出評價 21 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/6/28 下午 08:09:52

>
>>Q1...試了一下有一個錯誤...在END DECLARATIVES.之後要有一個section....
>> 所以我給它一個MAIN SECTION.但是在資料輸入第一筆後發現程式自動結束
>> 訊息如下
>>COBOL I/O error 48,02 on IDX-FILE file D:\COBTEST\INDEX.IDX
>>COBOL I/O error at line 57 in IDXTEST (D:\COBTEST\IDXTEST.COB) compiled
>
>
>把 mail 留給我, 我把範例及解說寄給你看
>討論區不能排版, 有一點麻煩
>排版好的程式, 一貼上就亂掉了
>
>我的信箱:knifour.home@msa.hinet.net

你ㄉ mail 我收到ㄌ........正努力中......感謝你.....︿︿
作者 : knifour(小毛)
[ 貼文 102 | 人氣 894 | 評價 390 | 評價/貼文 3.82 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/6/30 下午 10:46:08
先看一下, 有問題再mail給我
我還少寄了一個CVT1.EXE的程式給你(這是我自己寫的畫面轉換程式)
這兩天出差, 等回去再寄給你
 板主 : Cheryl
 > COBOL - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - COBOL - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
COBOL
1 wen 500 
2 小毛 310 
3 阿強 300 
4 ysl561 120 
5 bobkids 120 
6 zhaoxf 100 
7 chen 80 
8 ozzy 50 
9 WDCHIANG 50 
10 50 
COBOL
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.078125