我正在为复杂的格式开发文件阅读器。实际上有数百种不同的条目。在我现在这样做的方式中,我需要使用两个Streamreaders
,因为我之前需要提取一些信息。这些文件足够大,不能一次读取它们。
我想要的是通知用户哪些行未被读取。我的结构是这样的:
Streamreader file1 = new Streamreader(path);
while((line=file1.Readline()) != null)
{
if(line.StartsWith("HELLO")
{
//...
}
//... more conditions
}
Streamreader file2 = new Streamreader(path);
while((line=file2.Readline()) != null)
{
if(line.StartsWith("GOOD MORNING")
{
//...
}
//...more conditions
}
因此,如果我的读者在最后完美阅读所有行。事情可能很奇怪,有些条目还没有实现,我想抓住那条线。如您所见,此处的问题是两个 StreamReaders
。
我的选择是:
StreamReader
)时,我还需要修改第一个StreamReader
。有任何建议或更好的方法吗?
答案 0 :(得分:0)
我会创建一些谓词函数翻译行,即:
class PredicateResult{
public En_LineType type;
public String data;
}
private PredicateResult FirstReader(String line){
if(line.StartsWith("HELLO")){
return new PredicateResult{
type = En_LineType.Hello,
data = ...
}
}
}
这样,您有两个函数可用于检查行是否与其中任何一行匹配。另外,您可以轻松更改匹配行的条件,并且可以支持不同的格式。
答案 1 :(得分:0)
有许多字符串搜索算法。他们中的大多数使用散列与窗口算法,您可以从What is Sliding Window Algorithm? Examples?获得一个想法
每种算法在一般复杂性或最坏情况等方面都有细微差别。您可以选择一个最适合您应用的算法: