我被赋予了编写小型ATM程序的任务。程序在接收输入文件,运行文件,执行指令。
输入文件格式如下:
8000
12345678 1234 1234
500 100
B
W 100
87654321 4321 4321
100 0
W 10
第一行是ATM中保留的总现金,后面是一个空白行。剩余的输入表示零个或多个用户会话。每个会议包括: 用户的帐号,正确的PIN和他们实际输入的PIN。这些由空格分隔。 然后,在新线上,客户的当前余额和透支工具。 然后,一个或多个事务,每个事务在一个单独的行上。这些可以是以下类型之一: 余额查询,由操作代码B表示。 现金提取,由操作代码W后跟金额表示。 空行标记用户会话的结束。
我能够编写执行交易并输出结果的程序部分。
我需要帮助的是以有意义的方式解析输入文件(可能是对象)。我遇到的问题是输入长度可变,使得循环非常困难。
有人能把我推向正确的方向吗?我不只是懒得找答案。我只需要一个轻推。我现在已经坚持了半天。
万分感谢。
答案 0 :(得分:1)
您可以使用正则表达式来解析每一行,看起来您可以安全地匹配每一行。
12345678 1234 1234 = ^(\d+)\s(\d+)\s(\d+)$
500 100 = ^(\d+)\s(\d+)$
B = ^B$
W 100 = ^W\s(\d+)
由于知道第一行,只需手动将其转换为整数。
然后在每个空行上逐行遍历文件,开始尝试使用每个正则表达式解析下一行,直到匹配为止。使用正则表达式组()
来提取相关数据。相应地处理它们。当你得到一个空行时,重置所有内容并再次开始使用正则表达式进行解析。
阅读事件驱动的应用程序,就是这样,显然loop
读取文件是一个红鲱鱼。
空行表示逻辑事件集的开始。然后每一行代表一个原子事件,它应该很容易映射到一个函数/方法调用。