我有一些使用文本文件的 C# 代码,我似乎无法使其正确处理空行或空格行。
我的代码:
你可以看到我正在使用Vector3进行一些操作。如果这一行是注释行或空白行,我希望它什么也不做。如果它注意到括号,我希望它假设它是一个Vector3并解析它。最后,如果这是一个既不是这些的行,我希望它停止运行。以下是我使用记事本创建的示例文本文件:
请注意第二个和第三个 Vector3 之间有一个空隙。在这种特殊情况下,该行完全为空,它不包含空格或任何东西,我只是在记事本中按了[Enter][Enter]。当我的脚本到达这一行时,它似乎触发了file.EndOfStream布尔值...但它并不是文件的结尾!我该如何解决这个问题?我的while循环是否有更合适的条件?我还尝试过读入该行并检查它是否为null作为while条件,这是一种更流行的方法,但这种做法对我的情况也不起作用。
我的代码:
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布尔值...但它并不是文件的结尾!我该如何解决这个问题?我的while循环是否有更合适的条件?我还尝试过读入该行并检查它是否为null作为while条件,这是一种更流行的方法,但这种做法对我的情况也不起作用。
** 注意:“file”是类型为StreamReader的变量 **
string.IsNullOrWhitespace
。 - Preston GuillotEndOfStream
检查上失败了,几乎肯定是因为if (!isComment && !isPoint && !isWhiteSpace) { Application.Quit(); }
而退出的。 - Rob