无法弄清楚如何将数字从文件复制到数组

时间:2017-03-09 13:17:25

标签: c# arrays file-io

我刚刚开始学习C#,从文件中读取时出现了小问题。 我的文件名为data.dat,它看起来像这样:

6  
1 5  
4 5  
1 4  
7 3  
3 6  
4 7  

该文件中的第一行应该读入单个整数,它表示任务的数量(该文件中有多少对数,从第二行开始直到结束)。另一条线是一对数字 - 例如。 (1,5)。此对中的第一个数字(第1列)应添加到一个数组 - pArray = {1, 4, 1, 7, 3, 4},第二列应添加到另一个数组 - rArray = {5, 5, 4, 3, 6, 7}

using (TextReader reader = File.OpenText(@"pathToFile")){
    numberOfTaks = int.Parse(reader.ReadLine());   }

我尝试了这样的东西来读取第一行,但完全不知道如何读取另一行并将它们分成不同的数组。任何意见将是有益的。

5 个答案:

答案 0 :(得分:1)

假设第一行给出的计数始终是正确的,则无需阅读。

// using statement
using System.Linq;

// Reads the data file into memory
var pairs = File.ReadAllLines(@"C:\path\to\file\data.dat");

// Skip the first line, split each line by space, take first element, convert to int
var pArray = pairs.Skip(1).Select(x => Convert.ToInt32(x.Split(' ')[0]));

// Same as above, but take second element
var rArray = pairs.Skip(1).Select(x => Convert.ToInt32(x.Split(' ')[1]));

输出:

  

pArray = {1,4,1,7,3,4}   rArray = {5,5,4,3,6,7}

这两个数组实际上是IEnumerable,如果你想要一个直接数组pop .ToArray(),就像这样:

var pArray = pairs.Skip(1).Select(x => Convert.ToInt32(x.Split(' ')[0])).ToArray();

答案 1 :(得分:0)

You could do something like:

int count = int.Parse(file.ReadLine().Trim());
int[] pArray = new int[count], rArray = new int[count];
for (int i = 0; i < count; i++){
    string[] line = file.ReadLine().Split(' ');
    pArray[i] = int.Parse(line[0].Trim());
    rArray[i] = int.Parse(line[1].Trim());
}

答案 2 :(得分:0)

所有行(在我看来)必须通过一个字符串变量,你可以计算行数。 对于单独的每个数字,您可以执行以下操作:

string myLine = reader.ReadLine();
string firstChar = myLine.Split(0,1); // To take the first char

并为所有线条制作。如果你尝试使用调试并不是那么难。 在您拥有一行中的所有字符后,您可以创建您的数组。 希望它能帮助你理解。 再见!

答案 3 :(得分:0)

这是一种方法(假设您的文件格式正确)......

//read all lines from file
List<string>lines = File.ReadAllLines(@"pathToFile").ToList();
int number = int.Parse(lines[0]);
//list to hold first column
List<int> firstList = new List<int>();
//list to hold second
List<int> secondList = new List<int>();
for (int i = 1; i< lines.Count; i++) // iterate through all lines, starting at second (index 1)
{
    //split line by space
    string[] numbersFromLine = lines[i].Split(' ');
    //put first part of splitted line into list
    firstList.Add(int.Parse(numbersFromLine[0]));
    //put second part of splitted line into list
    secondList.Add(int.Parse(numbersFromLine[1]));
}

并且,如果你真的需要数组,你可以像这样从列表转换为数组:

var firstArray = firstList.ToArray();
var secondArray = secondList.ToArray();

答案 4 :(得分:0)

你可以这样做: -

// Read in the complete file
string fileContents = File.ReadAllText(@"pathToFile");

// Split on all Whitespace (removing all empty entries)
string[] numbers = fileContents.Split(new char[0], StringSplitOptions.RemoveEmptyEntries);

// Process all the numbers
int numberOfRows = int.Parse(numbers[0]);

int[] pArray = new int[numberOfRows];
int[] rArray = new int[numberOfRows];

for (int i = 0; i < numberOfRows; i++)
{
    pArray[i] = int.Parse(numbers[(i * 2) + 1]);
    rArray[i] = int.Parse(numbers[(i * 2) + 2]);
}