【问题标题】:trouble reading and writing to a file c#读取和写入文件c#的麻烦
【发布时间】:2016-11-20 19:16:46
【问题描述】:

我目前正在尝试获取一个不按字母顺序排列的单词文件,重新排序单词以便它们按字母顺序排列(我正在尝试使用非内置排序方法),然后编写将新排序的列表放入一个新的 txt 文件(必须创建的文件)。例如,假设txt文件中只有五个单词,分别是“dog bat apple rabbit cat”。我希望程序按字母顺序排列这些,然后创建一个保存该顺序的 txt 文件。截至目前,程序将遍历 txt 文件,但不会将重新排序的列表保存到新的 txt 文件中。保存到新文件中的是这个...“System.Collections.Generic.List`1[System.String]” 说实话,我对 c# 还不是很精通,所以如果我的结构或编码不是很好,我很抱歉。未排序的原始文件称为“jumbled english FILTERED.ALL.txt”,而我要写入的文件称为“english FILTERED.ALL.txt”。

static void Main(string[] args)
    {
        // declaring integer for minimum.
        int min = 0;
        // declare the list for the original file
        List<string> LinuxWords = new List<string>();
        List<string> lexicalOrder = new List<string>();
        // read the text from the file
        string[] lines = System.IO.File.ReadAllLines("jumbled english FILTERED.ALL.txt");
        string line = string.Empty;
        // seperate each word into a string
        //foreach (string line in lines)
        //{

            //add each word into the list.
            //LinuxWords.Add(line);
        //}

        for (int i = 0; i < lines.Length - 1; i++)
        {
            for (int j = i + 1; j < lines.Length; j++)
            {
                if (lines[i].Length < lines[j].Length)
                {
                    min = lines[i].Length;
                }
                else
                {
                    min = lines[j].Length;
                }
                for (int k = 0; k < min; k++)
                {
                    if (lines[i][k] > lines[j][k])
                    {
                        line = lines[i].ToString();
                        lines[i] = lines[j];
                        lines[j] = line;
                        break;
                    }
                    else if (lines[i][k] == lines[j][k])
                    {
                        continue;
                    }
                    else
                    {
                        break;
                    }
                }
            }
        }
        for (int i = 0; i < lines.Length; i++)
        {
            Console.WriteLine("The program is formatting the correct order");
            lexicalOrder.Add(lines[i]);

        }
        //lexicalOrder.ForEach(Console.WriteLine);
        //}
        //LinuxWords.ForEach(Console.WriteLine);

        File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + "english FILTERED.ALL.txt",
              lexicalOrder.ToString());



        // write the ordered list back into another .txt file named "english FILTERED.ALL.txt"
        // System.IO.File.WriteAllLines("english FILTERED.ALL.txt", lexicalOrder);
        Console.WriteLine("Finished");
    }

【问题讨论】:

  • jumbled english FILTERED.ALL.txt 格式是什么?请给我们一个摘录作为例子,好吗?期望的结果是什么?
  • 你说的不允许我进入我的代码是什么意思?
  • 防止响亮的克里斯蒂蜂鸣器和尽职尽责的较弱的同伴一起唱歌
  • 每个单词都在自己的行中,搜索我所说的正是它的意思。在调试模式下,我没有单步执行代码的选项。无论出于何种原因,它都不允许我
  • 期望的结果是将txt文件中的所有单词按字母顺序写入新文件

标签: c# sorting alphabetical file-writing file-read


【解决方案1】:

假设您的意思是您没有保存列表(如果这不是问题 - 请更具体) - 您需要更改

lexicalOrder.ToString()

类似

lexicalOrder.Aggregate((s1, s2) => s1 + " " + s2)

【讨论】:

  • 您介意解释一下它到底是做什么的,以便我有更好的理解吗?我相信那些被称为代表?我想知道它到底做了什么,这样我就可以学会将它也融入到其他项目中。提前谢谢!
  • @JimmyDean 委托基本上是一种方法。在这种情况下,Aggregate 需要一个方法来告诉它如何从两个字符串创建一个结果字符串。因为这就是 Aggregate 所做的 - 从第一个和第二个创建第三个字符串,然后从这个结果和第三个创建一个字符串。然后从那个结果和第四个......我给它一个简单的 - 添加第一个和一个空格和第二个。但是您不需要使用 Aggregate,您可以编写自己的方法从字符串列表而不是 Aggregate 创建一个字符串。
猜你喜欢
  • 2016-07-19
  • 1970-01-01
  • 2013-05-24
  • 2012-03-17
  • 1970-01-01
  • 1970-01-01
  • 2020-12-23
  • 2021-06-24
  • 2023-03-20
相关资源
最近更新 更多