从c#文本文件中读取整数

本文关键字:读取 整数 文件 文本 | 更新日期: 2023-09-27 18:02:00

我有一个包含以下内容的文本文件:

0 12
1 15
2 6
3 4
4 3
5 6
6 12
7 8
8 8
9 9
10 13

两行之间没有空格,但两个数字之间有空格。我想从文本文件中读取这些整数,并将两列保存到c#中的两个不同数组中。有人能帮忙吗

从c#文本文件中读取整数

尝试如下:

var r = File.ReadAllLines(path)
            .Select(line => line.Split(' '))
            .Select(arr => new
                {
                    Column0 = Int32.Parse(arr[0]),
                    Column1 = Int32.Parse(arr[1])
                    // etc
                })
            .ToArray();

:

int[] column0 = r.Select(x => x.Column0).ToArray(); // note double loop over r
int[] column1 = r.Select(x => x.Column1).ToArray();

或更长的,但也更有效率:

int[] column0 = new int[r.Length], column1 = new int[r.Length];
for (int i = 0; i < r.Length; i++) // single loop over r
{
    column0[i] = t[i].Column0;
    column1[i] = t[i].Column1;
}

或更长的,但也更有效率(一般来说):

List<int> column0  = new List<int>(), column1 = new List<int>();
using (Stream stream = File.Open(path, FileMode.Open))
using (TextReader sr = new StreamReader(stream, Encoding.UTF8))
{
    string line;
    while ((line = sr.ReadLine()) != null)
    {
        string[] arr = line.Split(' ');
        column0.Add(Int32.Parse(arr[0]);
        column1.Add(Int32.Parse(arr[1]);
    }
}

迭代/显示结果(基于零索引,即第0,1行等):

for (int i = 0; i < column0.Length; i++)
{
    Console.WriteLine("Line {0}: column 0: {1}, column 1: {2}", i, column0[i], column1[i]);
}

为了更好的可靠性,使用函数而不是Int32。解析:

static int Parse(string input)
{
    int i;
    if (!Int32.TryParse(intput, out i)
        throw new Exception("Can't parse " + input);
    return i;
}

您也可以检查以下代码…

string data = string.Empty;
        List<int[]> intarray = new List<int[]>();
        void ReadData()
        {
            data = File.ReadAllText("Input.txt");
        }
        List<int[]> Getdata()
        {            
            string[] lines = data.Split(''n', ''r');
            foreach (string line in lines)
            {
                if(!string.IsNullOrEmpty(line.Trim()))
                {
                    int[] intdata = new int[2];
                    string[] d = line.Split(' ');
                    intdata[0] = Convert.ToInt32(d[0]);
                    intdata[1] = Convert.ToInt32(d[1]);
                    intarray.Add(intdata);
                    intdata = null;
                }
            }
            return intarray;
        }