将字符串拆分为2D数组

时间:2017-05-18 15:51:27

标签: c#

我的.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();

3 个答案:

答案 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获取所有行并根据: 分割它们

  1. 获取所有行,每行将用字符串表示所有行组成一个字符串数组

  2. 然后选择这些结果并在字符串数组(行)的每个索引上用和:拆分字符串。

  3. 将string []的IEnumerable转换为array

     string[][] array = File.ReadAllLines("C:\\t\\My File2.txt")
            .Select(x => x.Split(':'))
            .ToArray();
    
  4. 将值放到控制台:

            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或其他可以处理无效行等错误的类。