2016-11-28 105 views
0

我有一個浮點數組,它是一個[] []和一個臨時讀數組,它是b []。我的數據是這樣的:二維字符串數組浮點數組c#

1 1 6 4 12 5 5 3 4 1 67 3 2 1 2 1 0 0 1 0 0 1 0 0 1 
2 2 48 2 60 1 3 2 2 1 22 3 1 1 1 1 0 0 1 0 0 1 0 0 1 
1 4 12 4 21 1 4 3 3 1 49 3 1 2 1 1 0 0 1 0 0 1 0 1 0 
1 1 42 2 79 1 4 3 4 2 45 3 1 2 1 1 0 0 0 0 0 0 0 0 1 
2 1 24 3 49 1 3 3 4 4 53 3 2 2 1 1 1 0 1 0 0 0 0 0 1 
1 4 36 2 91 5 3 3 4 4 35 3 1 2 2 1 0 0 1 0 0 0 0 1 0 
1 4 24 2 28 3 5 3 4 2 53 3 1 1 1 1 0 0 1 0 0 1 0 0 1 
1 2 36 2 69 1 3 3 2 3 35 3 1 1 2 1 0 1 1 0 1 0 0 0 0 
1 4 12 2 31 4 4 1 4 1 61 3 1 1 1 1 0 0 1 0 0 1 0 1 0 
2 2 30 4 52 1 1 4 2 3 28 3 2 1 1 1 1 0 1 0 0 1 0 0 0 
2 2 12 2 13 1 2 2 1 3 25 3 1 1 1 1 1 0 1 0 1 0 0 0 1 
2 1 48 2 43 1 2 2 4 2 24 3 1 1 1 1 0 0 1 0 1 0 0 0 1 
1 2 12 2 16 1 3 2 1 3 22 3 1 1 2 1 0 0 1 0 0 1 0 0 1 
2 1 24 4 12 1 5 3 4 3 60 3 2 1 1 1 1 0 1 0 0 1 0 1 0 

我的代碼是在這裏:

 for(int i = 0 ; i < linecount ; i++) 
     { 
      string[] b = sr.ReadLine().Split(' '); 
      for(int j = 0 ; j < b.Length ; j++) 
      { 
       a[i,j]= float.Parse(b[ j ]); 
      } 
     } 

它給我這個錯誤:

型 'System.FormatException' 未處理的異常發生在 mscorlib.dll

附加信息:輸入字符串格式不正確。

這個問題在互聯網上的大部分是關於123124.23234而不是123124,23234,但我的號碼是整數。我該怎麼做? 謝謝!

+3

的[可能的複製爲什麼我得到一個字符串轉換時出現FormatException一個浮動?](http://stackoverflow.com/questions/5592950/why-do-i-get-a-formatexception-when-converting-a-string-to-a-float) – MickyD

+0

a [i,j] = float.Parse(b [j],CultureInfo.InvariantCulture); 給我完全相同的錯誤。隨着「使用System.Globalization;」對?他們也都是整數。 –

+0

你需要在鑄造前修剪你的b [j]值,就好像你在數字之間有多個空格一樣會產生像「2」這樣的字符串,並且你的程序會因爲這個異常而失敗。更改float.Parse(b [j]); float.Parse(b [j] .Trim()); – Hakunamatata

回答

0

你解析爲浮動的項目之一不只是一個數字,它可能有空格。爲此,您可以找出其中:

for (int i = 0; i < linecount; i++) 
{ 
    string[] b = sr.ReadLine().Split(' '); 
    for (int j = 0; j < b.Length; j++) 
    { 

     try 
     { 
      a[i, j] = float.Parse(b[j]); 
     } 
     catch (FormatException ex) 
     { 
      var notANumber = b[j]; 
     } 

    } 
} 

而應該嘗試使用:

float.Parse(b[j].Trim()); // Remove spaces and the parse it 

也就是說,如果你確定你只能有空格,沒有其他字符。如果您有其他角色,則需要刪除它們或使用Replace替換它們。更好的是,您應該檢查解析是否成功,然後將其添加到數組中。

反正你知道現在的問題是什麼。

0

我們可以過濾掉任何不是一個數字的使用正則表達式,但我敢肯定有其他選擇太

const string testData = @"1 1 6 4 12 5 5 3 4 1 67 3 2 1 2 1 0 0 1 0 0 1 0 0 1 
2 2 48 2 60 1 3 2 2 1 22 3 1 1 1 1 0 0 1 0 0 1 0 0 1 
1 4 12 4 21 1 4 3 3 1 49 3 1 2 1 1 0 0 1 0 0 1 0 1 0 
1 1 42 2 79 1 4 3 4 2 45 3 1 2 1 1 0 0 0 0 0 0 0 0 1 
2 1 24 3 49 1 3 3 4 4 53 3 2 2 1 1 1 0 1 0 0 0 0 0 1 
1 4 36 2 91 5 3 3 4 4 35 3 1 2 2 1 0 0 1 0 0 0 0 1 0 
1 4 24 2 28 3 5 3 4 2 53 3 1 1 1 1 0 0 1 0 0 1 0 0 1 
1 2 36 2 69 1 3 3 2 3 35 3 1 1 2 1 0 1 1 0 1 0 0 0 0 
1 4 12 2 31 4 4 1 4 1 61 3 1 1 1 1 0 0 1 0 0 1 0 1 0 
2 2 30 4 52 1 1 4 2 3 28 3 2 1 1 1 1 0 1 0 0 1 0 0 0 
2 2 12 2 13 1 2 2 1 3 25 3 1 1 1 1 1 0 1 0 1 0 0 0 1 
2 1 48 2 43 1 2 2 4 2 24 3 1 1 1 1 0 0 1 0 1 0 0 0 1 
1 2 12 2 16 1 3 2 1 3 22 3 1 1 2 1 0 0 1 0 0 1 0 0 1 
2 1 24 4 12 1 5 3 4 3 60 3 2 1 1 1 1 0 1 0 0 1 0 1 0"; 

    float[] floatArray = testData.Split(' ') 
           .Select(s => Regex.Match(s, @"(\d*)").Groups[1].Value) 
           .Select(Convert.ToSingle) 
           .ToArray(); 
+1

這是一個很好的答案,但這些問題似乎是家庭作業問題,我懷疑他們是在linq水平。儘管如此,答案很好。 – CodingYoshi