2D字符串数组到float数组c#

时间:2016-11-28 00:35:12

标签: c# arrays type-conversion

我有一个浮点数组,它是一个[] []和一个临时读数数组,它是b []。我有这样的数据:

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 ]); 
            }
        }

它给了我这个错误:

  

未处理的类型&#39; System.FormatException&#39;发生在   mscorlib.dll中

     

其他信息:输入字符串的格式不正确。

互联网上的大部分问题都是关于123124.23234而不是123124,23234,但我的数字是整数。我该怎么做? 谢谢!

2 个答案:

答案 0 :(得分:0)

您要解析为float的项目之一不仅仅是一个数字,并且可能包含空格。你可以这样做来弄清楚:

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替换它们。更好的是,您应该检查解析是否成功然后将其添加到数组中。

无论如何,你知道现在的问题。

答案 1 :(得分: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();
相关问题