我有一些C#代碼與文本文件一起工作,而且我似乎無法使用空白或空白(空白)行正常工作。如何正確處理C#中的空白行,空行或空行#
我的代碼:
while (!file.EndOfStream)
{
line = file.ReadLine();
bool isComment = (line[0] == '/') && (line[1] == '/');
bool isPoint = (line[0] == '(') && (line[line.Length - 1] == ')');
bool isWhiteSpace = string.IsNullOrEmpty(line);
Debug.Log("Comment: " + isComment + ", Point: " + isPoint + ", WhiteSpace: " + isWhiteSpace + "Value: '" + line + "'");
if (!isComment && !isPoint && !isWhiteSpace) { Application.Quit(); }
else if (isPoint)
{
//Strip parenthesis
line = line.Remove(line.Length - 1, 1).Remove(0, 1);
//break into float array
string[] arr = line.Split(',');
float xVal = float.Parse(arr[0]);
float yVal = float.Parse(arr[1]);
float zVal = float.Parse(arr[2]);
Vector3 currentVector = new Vector3(xVal, yVal, zVal);
results.Add(currentVector);
}
}
你可以看到,我正好是做事情的Vector3。如果該行是註釋行或空白行,我希望它什麼都不做。如果它注意到括號,我想讓它假設它是一個Vector3並解析它。最後,如果它不是這些的一條線,我希望它完全停止。這裏是我用記事本創建的示例文本文件:
//This is a comment
// ... and so is this!
(0, -1.5, 3)
(1, 4, 1.23)
(3, 5, 2)
請注意,第二個和第三個Vector3之間存在間隙。在這種特殊情況下,該行完全是空的,它不包含空格或任何內容,我只是在記事本中按[Enter] [Enter]。當我的腳本到達這一行時,它似乎觸發了file.EndOfStream boolean ....但它不是文件的結尾!我怎樣才能解決這個問題?我的while循環有更合適的條件嗎?我也嘗試閱讀該行,並檢查它是否爲null,這是一種更爲流行的方法,但這種做法對我的情況並不起作用。
**注: 「文件」 是類型的StreamReader的變量**
一個空字符串和一個完全由空白字符組成的字符串不是一回事。一個新行是一個空白字符,如果您想要檢查空字符串,空字符串或純粹空白字符串,請使用'string.IsNullOrWhitespace'。 –
我認爲它不觸發file.EndOfStream,但它會引發異常,你只是用空的catch塊來吃那個異常。發生這種情況是因爲你首先檢查'line [0]',但如果行是空的,你超出範圍。如果性能不重要,您可以嘗試使用正則表達式。 –
好吧,我不知道這....所以一個「空」行是這樣的:string line =「」; ?我認爲,如果你的定義成立,我永遠不應該在文件中得到一個空行,只有空白或空。我的想法是否正確? – Drifter64