C# - 将文本文件字符串转换为双数组[] []?

时间:2014-07-12 15:46:01

标签: c# string double

帮助!!!大家好,我在网上找到了以下代码,用于将文本文件(带有一些额外的格式)转换为double t [] []。但是它声明字符串输入格式不正确,是否有人知道如何解决此问题?主要代码是深度学习神经网络,我想调试并运行,请帮助我愿意分享它的调试后的代码?请参阅下面的违规代码!

public static class DataParser
{

    public static double[][] Parse(string filePath)
    {


        filePath=@"C:\Users\DRS\Desktop\rbm2\SimpleRBM-master\optdigits-tra.txt";
        var x = File.ReadAllText(filePath);

        x = x.Replace("\r\n", "");

       var y = x.Split(" ".ToCharArray());

       var t =
           y. Select(
               s =>
              s.Substring(1).PadRight(1024, '0').Select(
                 n => double.Parse(n.ToString(CultureInfo.InvariantCulture))).ToArray()).ToArray();

        return t;

    }


}

1 个答案:

答案 0 :(得分:1)

您在Select上使用LINQ string。当string用作IEnumerable时,您可以单独获得每个字符。

然后你使用ToString(InvariantCulture)将字符转换为字符串,这是没用的。

最后,您尝试将这个单字符字符串解析为一个数字,当一个字符为-.

时,这个数字效果不佳

ToString()之前立即致电Parse始终是代码气味。可能你的意思是基于行分割,最好使用输入文件上的ReadAllLines方法完成。然后拆分每行内的空白。

return File.ReadAllLines(filePath)
                .Select(x => x.Split(' ').Select(double.Parse).ToArray()).ToArray();

但是,由于Maxwell在评论中链接了您的输入数据,我可以看到您实际上并没有尝试解析双打。试试这个:

return File.ReadAllLines(filePath).Where(x => x.Length > 10)
                .Select(x => x.ToCharArray().Select(x => x-'0').ToArray()).ToArray();

它将是一个int[][],反映出你的数字是二进制的,没有任何分数。另请注意,我只是丢弃关于数据实际代表的数字的注释。你可能想要的是一个更好的解析器,它实际上返回一个(int[][]char)对的列表,它们具有每个训练输入的位图数据和注释。