C#输入字符串的格式不正确

时间:2016-04-08 19:48:22

标签: c# parsing text text-files

我意识到这是一个经常重复的问题,但我已经读过其他20个问题而无法找到答案。

我试图解析一个文本文件,并在字符串不正确的第一行上获得异常。该文件位于Unity TextAsset中,因此位于file.text。此返回文件的内容为string

lines[0]已正确读取到15,第4行Debug.Log()会返回2,因此在拆分后不会留下额外的字符。

代码:

private void ReadFile()
{
    string[] lines = Regex.Split(file.text, "\n|\r|\r\n");
    Debug.Log(lines[0].Length);
    int width = int.Parse(lines[0]);
    int height = int.Parse(lines[1]);
    tab = new int[width, height];
    for (int i = 2; i < width+2; i++)
    {
        string[] values = Regex.Split(lines[i], "\t");
        for (int j = 0; j < height; j++)
        {
            tab[i, j] = int.Parse(values[j]);
        }
    }
}

这是我试图解析的文件:

15
15
2   0   0   3   0   0   0   2   0   0   0   3   0   0   2
0   1   0   0   0   4   0   0   0   4   0   0   0   1   0
0   0   1   0   0   0   3   0   3   0   0   0   1   0   0
3   0   0   1   0   0   0   3   0   0   0   1   0   0   3
0   4   0   0   1   0   0   0   0   0   1   0   0   0   0
0   0   3   0   0   4   0   0   0   4   0   0   0   4   0
0   0   0   0   0   0   3   0   3   0   0   0   3   0   0
2   0   0   3   0   0   0   1   0   0   0   3   0   0   2
0   0   3   0   0   0   3   0   3   0   0   0   3   0   0
0   4   0   0   0   4   0   0   0   4   0   0   0   4   0
0   0   0   0   1   0   0   0   0   0   1   0   0   0   0
3   0   0   1   0   0   0   3   0   0   0   1   0   0   3
0   0   1   0   0   0   3   0   3   0   0   0   1   0   0
0   1   0   0   0   4   0   0   0   4   0   0   0   1   0
2   0   0   0   0   0   0   2   0   0   0   0   0   0   2
#0  1   2   3   4   5   6   7   8   9   10  11  12  13  14

# 1 - DW
# 2 - TW
# 3 - DL
# 4 - TL

这里显示的是带有空白字符的同一个文件:

enter image description here

我不知道如何粘贴这个,所以这只是Word的截图。

1 个答案:

答案 0 :(得分:0)

您可以使用正则表达式确保字符串中不包含非数字..

List<List<int>> lines = File.ReadLines(filename)
                        .Select(line => Regex.Matches(line, @"\d+")
                        .Cast<Match>()
                        .Select(m => int.Parse(m.Value)).ToList())
                        .ToList();