我逐行遍历文本文件调整文本,以便文件最终匹配在MIPS模拟器(MARS)上运行所需的语法。我的问题是每当我看到一行中包含字符串“blezl”时,我想做几件事。首先,我需要在包含该单词的行后插入一些文本行。使用insert很容易。然后我必须在最初跟在找到的行之后的行之后插入一些文本行。问题是,我需要在整个文档中搜索位于找到的字符串末尾的字符串,然后在找到包含第二个字符串的任何行之前插入几行。所以..
#1 blezl v0,#10
#2 addu s1,s0,s5
#3 lw v1,0(s8)
...
#10 addu s1,s0,s5
我需要找到“blezl”,然后在“#1”和“#2”之间插入一些行。然后我在“#2”和“#3”之间插入一些行,然后我需要在整个文档中搜索“#10”,当我找到任何行时,我会在它前面插入一些行。问题是最后一步要求我搜索整个文档(逐行遍历,直到找到blezl)。这是因为“#10”可能出现在“#1”之前或之后的任何地方。这将是永远的(我的文件中有80k行,其中大约2%的行中有“blezl”。)如果没有大量的冗余步骤,我怎么能这样做呢?
答案 0 :(得分:0)
80k行不够大,无法将其加载到RAM中。一旦你有ram数据,搜索速度相当快。
如果您担心性能问题,可以根据标签制作b-tree来存储行。这将为您提供需要查找的每一行的log(n)搜索时间。