我的.txt文件有10 954行,格式为6,4:10
我需要使用StreamReader
加载.txt文件,并将':'
的每一行拆分为二维数组。
看起来像这样
[6,4 10]
[5,2 15]
[9,3 20]
所以我稍后可以计算每一列并将其放在特定的类别中。
这是我到目前为止最远的
StreamReader ulaz = new StreamReader("C:\\Users\\Core\\Desktop\\podaciC.txt");
string[] polje = new string[10954];
while (!ulaz.EndOfStream)
{
for (int i = 0; i < polje.GetLength(0); i++)
{
polje[i] = ulaz.ReadLine();
}
}
ulaz.Close();
foreach (string s in polje)
{
Console.WriteLine(s);
}
Console.ReadKey();
答案 0 :(得分:1)
以下是StreamReader的 ReadLine()方法的文档:https://msdn.microsoft.com/da-dk/library/system.io.streamreader.readline(v=vs.110).aspx
以下是字符串的 Split()方法的文档:https://msdn.microsoft.com/en-us/library/system.string.split(v=vs.110).aspx
您可以使用这些方法解决此问题。
我会提供代码,但这并不合乎道德,因为您没有表明您已尝试解决此问题。我可以帮你解决你的作业,但我不会为你解决。
答案 1 :(得分:0)
我的示例文件在每行中使用这些字符串:
6,4:10
6,4:10
6,4:10
6,4:10
使用Linq获取所有行并根据:
分割它们
获取所有行,每行将用字符串表示所有行组成一个字符串数组
然后选择这些结果并在字符串数组(行)的每个索引上用和:
拆分字符串。
将string []的IEnumerable转换为array
string[][] array = File.ReadAllLines("C:\\t\\My File2.txt")
.Select(x => x.Split(':'))
.ToArray();
将值放到控制台:
int counter = 0;
foreach (var rows in array)
{
foreach (var number in rows)
{
Console.Write("Number row {0} = {1}\t", counter, number);
}
Console.WriteLine();
counter++;
}
数组的外观:
string[4][]
{
string[2] { [0] => 6,4 [1] => 10 }
string[2] { [0] => 6,4 [1] => 10 }
string[2] { [0] => 6,4 [1] => 10 }
string[2] { [0] => 6,4 [1] => 10 }
}
控制台输出
Number row 0 = 6,4 Number row 0 = 10
Number row 1 = 6,4 Number row 1 = 10
Number row 2 = 6,4 Number row 2 = 10
Number row 3 = 6,4 Number row 3 = 10
答案 2 :(得分:0)
无需与数组和StreamReader
对抗。易于理解的例子:
using System.Collections.Generic;
using System.IO;
namespace ConsoleApplication2
{
class Program
{
static void Main (string[] args)
{
var filePath = "C:\\Users\\Core\\Desktop\\podaciC.txt";
var result = new List<KeyValuePair<decimal, int>> (11000); // create list with initial capacity
var lines = File.ReadLines (filePath); // allows to read file line by line (without loading entire file into memory)
foreach (var line in lines)
{
string[] splittedLine = line.Split (':'); // split line into array of two elements
decimal key = decimal.Parse (splittedLine[0]); // parse first element
int value = int.Parse (splittedLine[1]); // parse second element
var kvp = new KeyValuePair<decimal, int> (key, value); // create tuple
result.Add (kvp);
}
}
}
}
我建议您创建自定义类,如LineParser
或其他可以处理无效行等错误的类。