我的代码遇到的问题是,它打开文件夹中的一个文件并读取第一行,如果它是标头(HDR),则它将该行分配给currentHDR变量,然后它将进行搜索对于文件上的错误,它忽略了两个已知的常见错误,如果存在错误,则应将currentHDR行和该行写入报告文件,然后将currnetHDR分配给当前变量。这是为了确保在检查同一文件的下一个内容时,在不写入标题行的情况下写入所有其他错误。完成并打开新文件后,仍应为“ current”分配一些内容,这就是为什么它检查current是否不为null,如果为null则将current为null。并继续循环。
这是代码:
private string folderPath;
private object file;
public string current { get; private set; }
public string currentHDR { get; private set; }
public void Main()
{
folderPath = "C:\\data\\";
foreach (string pathToFile in Directory.EnumerateFiles(folderPath, "*.BER"))
{
using (System.IO.StreamWriter file =
new System.IO.StreamWriter(@"c:\data\newreport.txt", true))
{
foreach (var line in File.ReadLines(pathToFile))
{
if (line.Contains("HDR") && current == null)
{
string currentHDR = line;
}
else if (line.Contains("HDR") && current != null)
{
string currentHDR = line;
current = "";
}
if (line.Contains("ERR~") && line.Contains("Warnings exist"))
{ }
else
{
if (line.Contains("ERR~") && line.Contains("DEPARTPORT"))
{ }
else
{
if (line.Contains("ERR~WARNING") && current == null)
{
file.WriteLine(currentHDR);
file.WriteLine(line);
current = currentHDR;
}
else if (line.Contains("ERR~WARNING") && current != null)
{
file.WriteLine(line);
}
}
}
}
}
}
}
当前结果文件如下:
ERR〜WARNING-SHP.TPTID(xxx)的SHP.TPTCTRY()不能为空;
ERR〜WARNING-SHP.TPTID(xxx)的SHP.TPTCTRY()不能为空;
清楚地表明currentHDR在尝试将该行写出到文件时为空。就我所见,在循环中似乎并没有继续将值保留在变量中。
我误解了这是怎么回事?
答案 0 :(得分:3)
问题在于以下几行:
if (line.Contains("HDR") && current == null)
{
string currentHDR = line;
}
else if (line.Contains("HDR") && current != null)
{
string currentHDR = line;
current = "";
}
请注意,您正在使用string currentHDR = ...
,这意味着您要声明一个范围为每个currentHDR
块的不同的if
变量。删除string
类型声明,然后,您将使用期望的currentHDR
字段:
if (line.Contains("HDR") && current == null)
{
currentHDR = line;
}
else if (line.Contains("HDR") && current != null)
{
currentHDR = line;
current = "";
}