将可变长度输入文件解析为对象 - 建议?

时间:2011-11-03 20:03:06

标签: text-parsing

我被赋予了编写小型ATM程序的任务。程序在接收输入文件,运行文件,执行指令。

输入文件格式如下:

8000

12345678 1234 1234
500 100
B
W 100

87654321 4321 4321
100 0
W 10

第一行是ATM中保留的总现金,后面是一个空白行。剩余的输入表示零个或多个用户会话。每个会议包括: 用户的帐号,正确的PIN和他们实际输入的PIN。这些由空格分隔。 然后,在新线上,客户的当前余额和透支工具。 然后,一个或多个事务,每个事务在一个单独的行上。这些可以是以下类型之一: 余额查询,由操作代码B表示。 现金提取,由操作代码W后跟金额表示。 空行标记用户会话的结束。

我能够编写执行交易并输出结果的程序部分。

我需要帮助的是以有意义的方式解析输入文件(可能是对象)。我遇到的问题是输入长度可变,使得循环非常困难。

有人能把我推向正确的方向吗?我不只是懒得找答案。我只需要一个轻推。我现在已经坚持了半天。

万分感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用正则表达式来解析每一行,看起来您可以安全地匹配每一行。

12345678 1234 1234 = ^(\d+)\s(\d+)\s(\d+)$ 
500 100            = ^(\d+)\s(\d+)$
B                  = ^B$ 
W 100              = ^W\s(\d+)

由于知道第一行,只需手动将其转换为整数。

然后在每个空行上逐行遍历文件,开始尝试使用每个正则表达式解析下一行,直到匹配为止。使用正则表达式组()来提取相关数据。相应地处理它们。当你得到一个空行时,重置所有内容并再次开始使用正则表达式进行解析。

阅读事件驱动的应用程序,就是这样,显然loop读取文件是一个红鲱鱼。

空行表示逻辑事件集的开始。然后每一行代表一个原子事件,它应该很容易映射到一个函数/方法调用。