首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以使用可变长度的数据记录将文件读入COBOL吗?

可以使用可变长度的数据记录将文件读入COBOL吗?
EN

Stack Overflow用户
提问于 2019-04-17 14:18:28
回答 4查看 637关注 0票数 1

离开编程多年后,我决定重新开始编程,并发现自己非常享受编程的乐趣。在寻找代码的过程中,我发现了这些数据,这些数据可以从英国的Network Rail公开获得。

在其他方面,您可以获取时刻表数据,这是所有火车、公共汽车和渡轮行程的列表。

火车行程的时刻表记录可能如下所示:

代码语言:javascript
复制
BSNY819581902281902280001000 PEE5A99    122112002 EMU390 125                  
BX         VTY                                                                  
LOMNCRPIC 2131 00008  FL     TB                                                 
LIARDWCKJ           2133 00000000                                               
LISLDLJN            2134H00000000   SL                   H                      
LIHTNOJN            2138 00000000   FL                  1H                      
LISTKP              2140H000000002  SL                                          
LISTKPE1            2141H00000000                                               
LIADSWDRD           2142H00000000                                               
LICHDH              2143 000000002                                              
LIWLMSL             2146 000000004                      1                       
LIALDEDGE           2148 00000000                     1 3                       
LISBCH              2200 000000001  FL                                          
LICREWSBG           2203 00000000                                               
LICREWUML           2204 00000000                                               
LICREWE             2206 000000001  FL                   H                      
LICREWBHJ           2207H00000000                       1                       
LIMADELEY           2212 00000000   FL FL               5H                      
LINTNB              2222H00000000   FL FL                                       
LISTAFFDJ           2226H00000000   SL                                          
LISTAFFRD 2228H2231H     000000004  SL SL A C                                   
LISTAFTVJ           2233 00000000                                               
LIPNKRDG            2236H00000000                     1 1                       
LIBSBYJN            2244 00000000                                               
LIPBLJWM            2248 00000000                                               
LIDRLSTNJ           2251H00000000                                               
LIBSCTSTA           2252H00000000                     1                         
LIPRYBRNJ           2257 00000000                       7                       
LIASTON             2306H000000002                                              
LISTECHFD           2311H00000000                                               
LIBHAMINT           2315 000000004                                              
LIBKSWELL           2318H00000000                       1H                      
LICOVNTRY           2324 000000001                    2 3                       
LIRUGBTVJ           2336 00000000   UNL                 3                       
LIRUGBY             2340 000000005  UNLUNL              1H                      
LIHMTNJ             2343 00000000                       1H                      
LIDVNTYNJ           2346H00000000                                               
LILNGBKBY           2351 00000000                     1 1                       
LINMPTN             0001H000000001                      6                       
LIHANSLPJ           0016 00000000   SL                                          
LIMKNSCEN           0021 000000001  SL SL                                       
LIBLTCHLY           0023 000000004  SL SL             5 1H                      
LILEDBRNJ           0036 00000000   SL SL               2                       
LITRING             0042 000000002  SL SL               2H                      
LIBONENDJ           0048H00000000   SL SL               1H                      
LIWATFDJ            0056 000000009  SL SL               1H                      
LIHROW              0101H000000006  SL SL               3                       
LIWMBY              0107H000000006  CL                                          
LTWMBYICD 0117H0000      TF 

前两行描述列车正在运行的类型、何时运行、速度有多快等。其他两行描述列车将经过的点以及预计的时间。主要的结论是,每个记录都有不同的长度,这取决于旅程。

当我看到这一点时,我想“在COBOL中尝试和摆弄这将是一件很棒的事情”。我去了polytech,学习了PASCAL和COBOL,但只需要处理长度一致和数据一致的文件,而不是像这样的东西。

我花了几个小时试图在谷歌上找到这个问题的答案,但什么都没有真正显示出来,所以我问。

仅供参考,我已经设法在GW-BASIC中做到了这一点,如果需要,也可以用初级Python来做到这一点,但是COBOL,就是它,完全是另一回事。

有没有可能在COBOL中读到这样的东西而不必求助于巫术,或者它只是在“太难”的篮子里?我这样做只是为了好玩,所以真的没什么大不了的。

任何回应或反馈都是最受欢迎的。

非常感谢,

约瑟夫。

EN

回答 4

Stack Overflow用户

发布于 2019-04-17 18:27:21

是的,,这是可能的。对于文件,请使用Line Sequential

文件定义

代码语言:javascript
复制
select lineseq assign to "lineseq.dat"
     organization is line sequential.

要拆分这些行,请使用UNSTRING。即

代码语言:javascript
复制
UNSTRING in-line
   DELIMITED BY SPACES
   into  item-1, item-2, item-3
END-UNSTRING

用像python这样的语言可能更容易做到。

票数 2
EN

Stack Overflow用户

发布于 2019-04-18 05:01:00

实际上(在重新格式化问题之后)我认为COBOL非常适合这项工作,因为数据是固定长度的(也可能来自COBOL ...)

行序定义文件(如果它包含甚至尾随空格,可能甚至不需要行序;但由于这种情况可能会改变,行序将是fine)

  • OPEN INPUT file

  • ,直到文件末尾

  • 将读取的完整记录放入具有定义的子字段的本地记录中,并在验证(文件可能由于许多原因而损坏)

之后从子字段中访问数据

根据数据中的行数,您可以直接处理记录,将它们移动到表中(查看OCCURS),或者将它们WRITE到另一个文件中(可能是使用多个KEY定义的INDEXED )

票数 2
EN

Stack Overflow用户

发布于 2019-04-18 14:38:53

来扩展@Simon Sobisch的答案。

看着数据,试着把它弄清楚,我可以看到这些东西。

如你所说,最上面的两行是火车的类型和那个。

然后你有一条从LO开始的线,它一定是旅程的开始。接下来的7个字符是电视台,MNCRPIC大概是“曼彻斯特皮卡迪里”。然后是一个空格,然后是四个数字,这将是一个时间。

然后你有一堆从LI开始的线,它们是中间点。如果你要做UNSTRING DELIMITED BY SPACE的话,这会是一个问题。我假设H的意思是停止。

代码语言:javascript
复制
LISTAFFRD 2228H2231H     000000004  SL SL A C

是一条看起来很奇怪的线。

最后我们有LT,这是旅程的终点,在0117到达WMBYICD。

代码语言:javascript
复制
   01 TRAIN-SCHEDULE.
       03 RECORD-TYPE PIC XX.
       88 JOURNEY-START VALUE 'LO'.
       88 JOURNEY-INTERMEDIATE VALUE 'LI'.
       88 JOURNEY-TERMINATE VALUE 'LT'.
       03 TRAIN-STATION PIC X(7).
       03 FILLER PIC X(11).
       03 TRAIN-TIME.
         05 TRAIN-TIME-HH PIC 99.
         05 TRAIN-TIME-MM PIC 99.
       03 TRAIN-HALT-FLAG PIC X.
       88 TRAIN-STOPS-HERE VALUE 'H'.

诸若此类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55721076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档