2016-04-08 19 views
-1

これは非常に頻繁に繰り返される質問ですが、私は20の他のものと同じように読んでおり、答えを見つけることができません。C#入力文字列が正しい形式でない

私は、テキストファイルを解析し、文字列が正しくない最初の行で例外を取得しようとしています。このファイルはUnityのTextAssetに存在し、したがってfile.textに存在します。この戻りファイルの内容はstringです。

lines[0]は、15に正しく読み取られます.12行目の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

は、

これを貼り付ける方法はわからないので、これはWのスクリーンショットですord。

+0

、どのようにファイルを読んでいますか? –

+0

'int.Parse(lines [0] .Trim()) 'で試してください。 – Eser

+0

@残念ながら、トリムは機能しませんでした。 – Asalas77

答えて

0

あなたは非数字は、あなたの文字列に含まれていないことを確認するために正規表現を使用することができます。..

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

ReadLinesが定義されていないというエラーが表示されます。私はReadAllLineを私のコードの一部で処理して、行を分割しました。私はstringでfilenameを使用しないようにしたいと思っていましたが、今のところそれをしなくてはなりません。ありがとう – Asalas77

関連する問題