代碼的作用是在一長串字符串(另一個文檔)中查找字符串的一部分(來自一個文檔),並將結果返回給列表。Inner While Loop只運行一次
我有兩個while循環,一個嵌套在另一箇中。外部循環讀取該文檔的每一行,內部讀取其文檔的每個循環。出於某種原因,內部只運行一次(對於外部循環的第一次迭代)。你能解釋爲什麼以及如何修復它嗎?它似乎只讀取所有行一次,然後不再讀取它們......我需要內循環每次外循環運行時逐行讀取。
這是我的代碼。
private static void getGUIDAndType()
{
try
{
Console.WriteLine("Begin.");
String dbFilePath = @"C:\WindowsApps\CRM\crm_interface\data\";
StreamReader dbsr = new StreamReader(dbFilePath + "newdbcontents.txt");
List<string> dblines = new List<string>();
String newDataPath = @"C:\WindowsApps\CRM\crm_interface\data\";
StreamReader nsr = new StreamReader(newDataPath + "HolidayList1.txt");
List<string> new1 = new List<string>();
string dbline;
string newline;
Program prog = new Program();
while ((dbline = dbsr.ReadLine()) != null)
{
while ((newline = nsr.ReadLine()) != null)
{
newline = newline.Trim();
if (dbline.IndexOf(newline) != -1)
{//if found... get all info for now
Console.WriteLine("FOUND: " + newline);
System.Threading.Thread.Sleep(1000);
new1.Add(newline);
}
else
{//the first line of db does not contain this line...
//go to next newline.
Console.WriteLine("Lines do not match - continuing");
continue;
}
}
nsr.Close();
Console.WriteLine("should be run as many times as there are dblines");
Console.WriteLine(newline);
System.Threading.Thread.Sleep(5000);
//continue;
}
Console.WriteLine("Writing to dbc2.txt");
System.IO.File.WriteAllLines(@"C:\WindowsApps\CRM\crm_interface\data\dbc2.txt", new1.ToArray());
Console.WriteLine("Finished. Press ENTER to continue.");
Console.WriteLine("End.");
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex);
Console.ReadLine();
}
}
我嘗試設置內環爲方法,但是當我指在該方法中dbline我得到的對象引用異常在這一行: if (dbline.IndexOf(newline) != -1)
。沒有花太多時間來解決這個問題,並回到嵌套循環;但如果我採用這種方法,我不認爲我的結果會有任何不同。
如果你能想到一個更好的方式來做我想做的事,請讓我知道。我無法使用包含,因爲我引用的兩個txt文檔中的行不完全相同。
謝謝。
多大的文件:
如果你真的打算多次從
nsr
讀線,則可以通過底層Stream
上重新定位並丟棄StreamReader
的緩衝尋求的開始?我建議刪除StreamReader並簡單地使用'File.ReadAllLines' http://msdn.microsoft.com/en-us/library/system.io.file.readalllines.aspx – asawyer 2012-02-28 18:33:50