似乎是一个足够标准的问题,可以保证解决方案中的标准设计:
假设我想在文件中写入x + 2(或更少)字符串。 x个字符串构成一个部分的内容,两个字符串构成该部分的页眉和页脚。问题是,如果内容中没有字符串,我就不会编写页眉/页脚字符串。此外,这些x字符串是从代码中的不同位置编写的。所以目前的流程是:
即使内容为空,这也会导致页眉/页脚字符串被写入,我必须解决这个问题,即在这种情况下不写入页眉/页脚字符串。
我能想到的解决方案是在正在编写的第一个内容字符串之前编写标题字符串(通过使用标题字符串写入汇总每个内容字符串写入来实现,并使用布尔标志防止多个标题字符串写入),以及然后只有在写入标题字符串时才写入页脚字符串(由布尔标志控制)。
这是它的顶级要点,只是想知道是否有适用于这类案件的标准方法。
谢谢!
答案 0 :(得分:2)
有很多解决方案:
由于前两个解决方案涉及效率低下(可能缓存大量数据或使用相对较慢的外部存储),我将专注于后者。请参阅底部的说明,了解如何进行缓存(a)。
不需要缓存数据的方法只是指示您是否已编写标题。在每个数据行之前,仅在尚未设置标志时输出标题(并设置标志)。您也可以使用此标志来控制页脚(如果尚未输出页眉,则页脚也不应该):
def outHeader (str):
headerText = str
headerSent = false
def outdata (str):
if not headerSent:
write headerText
headerSent = true
write str
def outFooter (str):
if headerSent:
write str
就没有数据缓存而言,这个解决方案可能更简单。
(a)如果您 希望使用缓存解决方案(尽管建议它是次优解决方案),以下伪代码显示如何可以这样做:
def outHeader (str):
cachedHeader = str
cachedData = ""
def outdata (str):
cachedData = cachedData + str + "\n"
def outFooter (str):
if cachedData != "":
write cachedHeader
write cachedData
write str
内存缓存和基于文件的缓存之间的唯一区别是:
cachedData
中创建outHeader()
。str
发送到临时文件并在lineCount
中递增outData()
。lineCount
来确定outFooter
中是否有缓存数据,并从临时文件中读取行以作为数据输出。