我刚刚开始学习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()); }
我尝试了这样的东西来读取第一行,但完全不知道如何读取另一行并将它们分成不同的数组。任何意见将是有益的。
答案 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]);
}