Text parsing 将可变长度输入文件解析为对象-建议?
我的任务是编写一个小型ATM程序。程序收到输入文件后,运行该文件,执行指令 输入文件的格式如下: 8000Text parsing 将可变长度输入文件解析为对象-建议?,text-parsing,Text Parsing,我的任务是编写一个小型ATM程序。程序收到输入文件后,运行该文件,执行指令 输入文件的格式如下: 8000 1234567812341234 500 100 B W 100 8765432143214321 100 0 W 10 第一行是ATM机中持有的现金总额,后面是一个空行。剩余的输入表示零个或多个用户会话。每届会议包括: 用户的帐号、正确的PIN和他们实际输入的PIN。它们之间用空格隔开。 然后,在一个新的行上,客户的当前余额和透支设施。 然后,一个或多个事务,每个事务位于单独的行上。
1234567812341234
500 100
B
W 100
8765432143214321
100 0
W 10
第一行是ATM机中持有的现金总额,后面是一个空行。剩余的输入表示零个或多个用户会话。每届会议包括: 用户的帐号、正确的PIN和他们实际输入的PIN。它们之间用空格隔开。 然后,在一个新的行上,客户的当前余额和透支设施。 然后,一个或多个事务,每个事务位于单独的行上。这些可以是以下类型之一: 余额查询,由操作代码B表示。 现金提取,由操作代码W和金额表示。 空行表示用户会话的结束 我能够编写程序中执行事务和输出结果的部分 我需要的帮助是以有意义的方式解析输入文件(可能是对象)。我有问题的事实,输入是可变长度,使循环非常困难 有人能把我推向正确的方向吗?我不仅仅是懒散地寻找答案。我只需要轻轻推一下。这件事我已经坚持了半天了
非常感谢。您可以使用正则表达式解析每一行,看起来您可以安全地唯一地匹配每一行
12345678 1234 1234 = ^(\d+)\s(\d+)\s(\d+)$
500 100 = ^(\d+)\s(\d+)$
B = ^B$
W 100 = ^W\s(\d+)
因为第一行是已知的,所以只需手动将其转换为整数即可
然后逐行遍历文件,在每个空行上开始尝试用每个正则表达式解析下一行,直到找到匹配项。使用正则表达式组()
提取相关数据。相应地处理它们。当您得到一个空行时,重置所有内容并再次开始使用正则表达式进行解析
阅读事件驱动的应用程序,这就是问题所在,显然,读取文件时的循环是一种误导
空行表示逻辑事件集的开始。然后,每一行表示一个原子事件,该事件应该很容易映射到函数/方法调用。您可以使用正则表达式来解析每一行,看起来您可以安全地唯一地匹配每一行
12345678 1234 1234 = ^(\d+)\s(\d+)\s(\d+)$
500 100 = ^(\d+)\s(\d+)$
B = ^B$
W 100 = ^W\s(\d+)
因为第一行是已知的,所以只需手动将其转换为整数即可
然后逐行遍历文件,在每个空行上开始尝试用每个正则表达式解析下一行,直到找到匹配项。使用正则表达式组()
提取相关数据。相应地处理它们。当您得到一个空行时,重置所有内容并再次开始使用正则表达式进行解析
阅读事件驱动的应用程序,这就是问题所在,显然,读取文件时的循环是一种误导
空行表示逻辑事件集的开始。然后,每一行代表一个原子事件,它应该很容易映射到函数/方法调用。非常感谢您的快速响应。我使用了你建议的一个变体,它起了作用。我使用了基于行计数器的switch语句。第0行:科目编号;别针;别针。第1行:平衡;透支默认值:A事务。如果第一个字符是W,则撤消。B、 平衡。否则,交易结束。嗨,你能解决你面临的问题吗?如果可能的话,你能为这个问题提供你的示例代码…我正在尝试一个类似的…非常感谢你的快速响应。我使用了你建议的一个变体,它起了作用。我使用了基于行计数器的switch语句。第0行:科目编号;别针;别针。第1行:平衡;透支默认值:A事务。如果第一个字符是W,则撤消。B、 平衡。否则,交易结束。嗨,你能解决你面临的问题吗?如果可能的话,你能为这个问题提供你的示例代码…我正在尝试一个类似的。。。