离开编程多年后,我决定重新开始编程,并发现自己非常享受编程的乐趣。在寻找代码的过程中,我发现了这些数据,这些数据可以从英国的Network Rail公开获得。
在其他方面,您可以获取时刻表数据,这是所有火车、公共汽车和渡轮行程的列表。
火车行程的时刻表记录可能如下所示:
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中读到这样的东西而不必求助于巫术,或者它只是在“太难”的篮子里?我这样做只是为了好玩,所以真的没什么大不了的。
任何回应或反馈都是最受欢迎的。
非常感谢,
约瑟夫。
发布于 2019-04-17 18:27:21
是的,,这是可能的。对于文件,请使用Line Sequential
文件定义
select lineseq assign to "lineseq.dat"
organization is line sequential.要拆分这些行,请使用UNSTRING。即
UNSTRING in-line
DELIMITED BY SPACES
into item-1, item-2, item-3
END-UNSTRING用像python这样的语言可能更容易做到。
发布于 2019-04-18 05:01:00
实际上(在重新格式化问题之后)我认为COBOL非常适合这项工作,因为数据是固定长度的(也可能来自COBOL ...)
行序定义文件(如果它包含甚至尾随空格,可能甚至不需要行序;但由于这种情况可能会改变,行序将是fine)
OPEN INPUT file,
之后从子字段中访问数据
根据数据中的行数,您可以直接处理记录,将它们移动到表中(查看OCCURS),或者将它们WRITE到另一个文件中(可能是使用多个KEY定义的INDEXED )
发布于 2019-04-18 14:38:53
来扩展@Simon Sobisch的答案。
看着数据,试着把它弄清楚,我可以看到这些东西。
如你所说,最上面的两行是火车的类型和那个。
然后你有一条从LO开始的线,它一定是旅程的开始。接下来的7个字符是电视台,MNCRPIC大概是“曼彻斯特皮卡迪里”。然后是一个空格,然后是四个数字,这将是一个时间。
然后你有一堆从LI开始的线,它们是中间点。如果你要做UNSTRING DELIMITED BY SPACE的话,这会是一个问题。我假设H的意思是停止。
LISTAFFRD 2228H2231H 000000004 SL SL A C是一条看起来很奇怪的线。
最后我们有LT,这是旅程的终点,在0117到达WMBYICD。
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'.诸若此类。
https://stackoverflow.com/questions/55721076
复制相似问题