C++逐行读取特定格式文件的实现问题求助
解决方案:处理任务约束文件
我来帮你搞定这个文件处理的问题!根据你描述的文件格式,我们可以用Python来轻松实现需求——读取文件、解析每行的任务和约束,最后把数据结构化存储起来。
先明确需求细节
你的文件结构是:
- 第一行是任务的总数量(比如示例里的11)
- 后续每行对应一个任务:开头是任务名称,后面跟着若干约束名称,最后以
0结尾(这个0是行的终止符,不需要作为约束存储)
完整代码示例(按行存储的文件)
如果你的文件是每行对应一个任务的格式(第一行是总数量,后续每行一个任务),用这个版本:
# 打开文件(替换成你的文件路径) with open('task_constraints.txt', 'r') as f: # 读取第一行,获取任务总数 total_tasks = int(f.readline().strip()) # 创建字典存储任务和对应的约束 task_constraints = {} # 循环读取每一行任务数据 for _ in range(total_tasks): # 读取一行并分割成字符串列表 line = f.readline().strip() if not line: continue # 跳过空行(如果有的话) # 转换为整数列表 parts = list(map(int, line.split())) # 提取任务名称(第一个元素)和约束列表(去掉最后一个0) task_name = parts[0] constraints = parts[1:-1] # 从第二个元素到倒数第二个(跳过末尾的0) # 存入字典 task_constraints[task_name] = constraints # 打印结果验证 for task, cons in task_constraints.items(): print(f"任务 {task} 的约束:{cons}")
代码解释
- 文件读取:用
with open()上下文管理器,自动处理文件关闭,避免资源泄漏。 - 获取任务总数:读取第一行并转成整数,确定后续要读取多少行任务数据。
- 逐行解析:
- 每行分割成字符串后转成整数列表
- 第一个元素是任务名,
parts[1:-1]提取约束(跳过最后一个终止符0)
- 结构化存储:用字典存储,方便后续根据任务名快速查找约束。
适配所有数据在一行的情况
如果你的文件里所有数据是一行连续的(比如你给出的示例字符串),那需要调整代码来逐个提取任务块:
with open('task_constraints.txt', 'r') as f: # 读取所有内容并转成整数列表 all_data = list(map(int, f.read().strip().split())) total_tasks = all_data[0] current_index = 1 task_constraints = {} for _ in range(total_tasks): # 从当前位置开始,找到第一个0的索引 end_index = all_data.index(0, current_index) # 提取任务块:从current_index到end_index task_block = all_data[current_index:end_index+1] task_name = task_block[0] constraints = task_block[1:-1] task_constraints[task_name] = constraints # 更新当前索引到下一个任务的起始位置 current_index = end_index + 1 # 打印结果 for task, cons in task_constraints.items(): print(f"任务 {task} 的约束:{cons}")
针对你示例数据的输出
无论用哪个版本,运行后都会得到符合预期的结果:
任务 1 的约束:[] 任务 2 的约束:[8] 任务 3 的约束:[8] 任务 4 的约束:[5, 10] 任务 5 的约束:[8] 任务 6 的约束:[1, 3] 任务 7 的约束:[5] 任务 8 的约束:[11] 任务 9 的约束:[6] 任务 10 的约束:[5, 7] 任务 11 的约束:[]
内容的提问来源于stack exchange,提问作者Toms lns
相关产品推荐
相关产品推荐

