首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# - Stream Reader或者最好的方法是什么?

C# - Stream Reader或者最好的方法是什么?
EN

Stack Overflow用户
提问于 2011-03-13 09:09:44
回答 3查看 806关注 0票数 0

我有一个文本文件,里面有类似这样的东西。

汤姆1 2

曾傑瑞3 4

使用C#,我将其填充到两个数组中

第一组={汤姆,曾傑瑞}-1\f25 dim array -1\f6

第二个数组={(1,2),(3,4)} -2个数组

请帮我弄一下这个。任何帮助都将不胜感激。

代码语言:javascript
复制
Console.WriteLine("Enter the file name with extension:");   
string filename = Console.ReadLine();   
string s = System.IO.File.ReadAllText("C:/Desktop/" + filename);  
Console.WriteLine("\n Text Details in the file: \n \n"+s);
EN

回答 3

Stack Overflow用户

发布于 2011-03-13 09:32:47

有几种方式,这取决于你想要变得有多“优雅”,和/或汤姆、曾傑瑞是否总是一个词。

  • 使用字符串方法分析每一行
  • 使用RegEx
  • 使用Linq to Text

分析每一行

最简单的方法是这样的(快速、肮脏、非常脆弱的解决方案):

代码语言:javascript
复制
var path = "fileName.txt";

var names = new List<string>();
var values = new List<KeyValuePair<int, int>>();

using (var reader = File.OpenText(path))
{
        string s = "";
        while ((s = reader.ReadLine()) != null)
        {
            String[] arr = s.Split(' ');
            names.Add(arr[0]);
            values.Add(new KeyValuePair<int, int>(int.Parse(arr[1]), int.Parse(arr[2])));
        }
}

如果需要,您可以将列表转换为数组

票数 1
EN

Stack Overflow用户

发布于 2011-03-13 09:47:03

更完整的版本;)

代码语言:javascript
复制
        string filename = "";
        do
        {
            Console.WriteLine("Enter the file name with extension:");
            filename = Environment.GetEnvironmentVariable("HOMEDRIVE") + Environment.GetEnvironmentVariable("HOMEPATH") + "\\Desktop\\" + Console.ReadLine();
            if (!System.IO.File.Exists(filename))
                Console.WriteLine("File doesn't exist!");
            else
                break;
        } while (true);
        System.IO.StreamReader readfile = new System.IO.StreamReader(filename);

        List<string> Names = new List<string>();
        List<int[]> Numbers = new List<int[]>();
        string val = "";
        while ((val = readfile.ReadLine()) != null)
        {
            if (val == string.Empty)
                continue;
            List<string> parts = val.Split(' ').ToList<string>();
            Names.Add(parts[0]);
            parts.RemoveAt(0);
            Numbers.Add(parts.ConvertAll<int>(delegate(string i) { return int.Parse(i); }).ToArray());
        }
        readfile.Close();

        //Print out info
        foreach (string name in Names)
        {
            Console.Write(name + ", ");
        }
        Console.WriteLine();
        foreach (int[] Numberset in Numbers)
        {
            Console.Write("{");
            foreach (int number in Numberset)
                Console.Write(number + ", ");
            Console.Write("} ");
        }
        Console.ReadLine();
票数 0
EN

Stack Overflow用户

发布于 2011-03-13 10:20:46

我喜欢函数式方法。

代码语言:javascript
复制
// var fileContent = System.IO.File.ReadAllText("somefilethathasthestuff");
var fileContent = @"Tom 1 2
Jerry 3 4";
var readData = fileContent.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
   .Aggregate(new { names = new List<string>(), data = new List<int[]>() },
       (result, line) => {
           var fields = line.Split(new []{' '}, 2);
           result.names.Add(fields[0]);
           result.data.Add(fields[1].Split(new[] { ' ' }).Select(n => int.Parse(n)).ToArray());
           return result;
        }
   );
string[] firstarray = readData.names.ToArray();
int[][] secondarray = readData.data.ToArray();

这使用了一个数字的锯齿数组,但是如果你真的需要的话,你可以把它复制到一个2d数组中。更好的是,根本不要复制到数组。名称使用List < string>,数字使用List < int[] >。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5286750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档