Apple ][模拟器开发:如何正确过滤空行实现list命令输出?
解决Apple ][模拟器list命令的空行过滤问题
问题分析
你遇到的核心问题是对Apple ][文件的行格式判断错误:那些看似“空行”的内容实际上包含行号,并不是完全空白的行。比如原文件里的第2行是2(或2 ),不是空字符串,直接用“行为空则跳过”的逻辑会把这些带行号的空白行误判为非空行,要么只输出行号,要么拆分内容时出错。
正确处理逻辑
要实现list命令的预期输出,关键是判断行号之后的实际代码内容是否为空,而不是整行是否为空:
- 拆分每行的行号和代码内容部分
- 检查代码内容部分是否包含有效字符(去掉前后空白后非空)
- 仅保留代码内容非空的行,原样输出
代码实现示例
方式1:手动拆分行号与内容
with open("apple2_source.txt", "r") as f: for raw_line in f: line = raw_line.rstrip('\n') # 移除末尾换行符 # 定位行号结束位置(连续数字的部分) num_end = 0 while num_end < len(line) and line[num_end].isdigit(): num_end += 1 # 提取行号后的内容并去除前后空白 code_content = line[num_end:].strip() # 仅输出有有效代码的行 if code_content: print(line)
方式2:正则表达式匹配
如果行格式固定(行号为数字,后跟空白和代码),用正则可以更简洁:
import re # 匹配行号开头,后跟任意空白,再跟代码内容的正则 line_regex = re.compile(r'^(\d+)\s*(.*)$') with open("apple2_source.txt", "r") as f: for raw_line in f: line = raw_line.rstrip('\n') match_result = line_regex.match(line) if match_result: code_content = match_result.group(2).strip() if code_content: print(line)
效果验证
用你的示例文件测试时,上述代码会自动跳过行号后无内容的行,输出:
1 [line of code 1] 5 [line of code 2] 10 [line of code 3]
内容的提问来源于stack exchange,提问作者Tokyn Blast
相关产品推荐
相关产品推荐

