考虑以下循环:
marker_stream = 0
for character in input_file:
if character != ',':
marker_stream |= 1
marker_stream <<= 1
对于input_file_contents
中的每个字符,此循环执行处理步骤,将处理步骤的结果(0
或1
位)存储在marker_stream
中,然后将marker_stream
移到一个位置以准备下一次迭代。
问题在于:我想处理输入文件中的每个字符,但我只想转移marker_stream
number of characters in the input file - 1
次。上面的循环将marker_stream
移动了太多次。
现在,我知道我可以在for循环之后添加marker_stream >>= 1
,或者我可以保留一些标志,说明我们当前处理的字符是否是文件中的最后一个字符,但这些都不是解决方案似乎很棒。标志解决方案涉及标志(yuck),如果处理循环更长,额外的行解决方案可能会令人困惑。
我正在寻找一个更优雅的解决方案来解决这个问题,而且更常见的是“我有n个要处理的项目,但有一个更新步骤,我只想运行n-1次”问题。
答案 0 :(得分:0)
分别处理文件中的第一个元素;将文件视为一个条目的头部,尾部包含其余条目:
// Process head
entry <- readNext(inFile)
write(entry, outFile)
// Process tail
while (NOT inFile.endOfFile)
write(separator, outFile)
entry <- readNext(inFile)
write(entry, outFile)
endwhile
头条目不跟随分隔符;尾部条目都遵循分隔符。你得到了你的&#39; n-1&#39;通过不同于文件中的n-1尾部条目来处理单个头部条目的效果。