6

给定一个由空格分隔的数据文件,

10 10 10 10 222 331 
2 3 3 4 45
4 2 2 4

如何读取此文件并加载到数组中

谢谢

4

4 回答 4

14
var fileContent = File.ReadAllText(fileName);
var array = fileContent.Split((string[])null, StringSplitOptions.RemoveEmptyEntries);

如果你只有数字并且需要一个 int 列表,你可以这样做:

var numbers = array.Select(arg => int.Parse(arg)).ToList();
于 2011-05-20T00:03:42.273 回答
6

这取决于您想要的数组类型。如果要将所有内容展平为一维数组,请使用 Alex Aza 的答案,否则,如果您想要一个映射到文本文件中的行和元素的二维数组:

var array = File.ReadAllLines(filename)
                .Select(line => line.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries))
                .Where(line => !string.IsNullOrWhiteSpace(line)) // Use this to filter blank lines.
                .Select(int.Parse) // Assuming you want an int array.
                .ToArray();

注意没有错误处理,所以如果解析失败,上面的代码会抛出异常。

于 2011-05-20T00:43:29.187 回答
1

你会感兴趣StreamReader.ReadLine()并且String.Split()

于 2011-05-20T00:04:27.950 回答
0

我无法得到Quick Joe Smith的工作答案,所以我对其进行了修改。我将修改后的代码放入“FileReader”类中的静态方法中:

public static double[][] readWhitespaceDelimitedDoubles(string[] input)
{
    double[][] array = input.Where(line => !String.IsNullOrWhiteSpace(line)) // Use this to filter blank lines.
        .Select(line => line.Split((string[])null, StringSplitOptions.RemoveEmptyEntries))
        .Select(line => line.Select(element => double.Parse(element)))
        .Select(line => line.ToArray())
        .ToArray();

        return array;
}

对于我的应用程序,我解析的是 double 而不是 int。要调用代码,请尝试使用以下内容:

string[] fileContents = System.IO.File.ReadAllLines(openFileDialog1.FileName);
double[][] fileContentsArray = FileReader.readWhitespaceDelimitedDoubles(fileContents);

Console.WriteLine("Number of Rows:      {0,3}", fileContentsArray.Length);
Console.WriteLine("Number of Cols:      {0,3}", fileContentsArray[0].Length);
于 2014-04-01T17:58:46.347 回答