-3

我每隔几秒钟就有一个新文件,如下所示:

23
45
21
1
9
23
42
22
40
11
33
32
18
11
12
32
22
7
37
30

在这个要读取的文本文件中,每行有一个数字,介于 1-40 之间。这些文件每分钟生成几次。

我正在尝试使用StringReaderand来命令它们升序StringWriter。我的逻辑一定是有缺陷的,因为我打算将其发送到的文件中没有显示任何内容。true我作为参数传递,append但我的排序文件中仍然没有填充任何内容。

目标是使用循环从文本文件中读取,该for循环迭代 1-40 个 int 值,并将其与读取的文件中的每个字符串或 int 进行比较,并在找到时将读取文件中的按排序顺序复制到已排序的文件中。

我已经看了一段时间了,它应该可以工作,但不能。像我所做的那样,使用文件读取器/写入器类或流读取器/写入器会更容易吗?

public static void ProcessDirectory()
{
    int variable1;
    StreamReader readToSort = new StreamReader(@"C:write.txt");
    StreamWriter writeSorted = new StreamWriter(@"C:Sorted_File.txt", true);

    for (int i = 1; i > 41; i++)
    {
        variable1 = (readToSort.Read());

        while (!readToSort.EndOfStream)
        {
            if (variable1 == i)
            {
                writeSorted.Write(i.ToString() + "\n");
            }
        }

        MessageBox.Show("processing #" + variable1);
    }

    readToSort.Close();
    writeSorted.Close();
}
4

1 回答 1

0

为了确保我正确理解您要解决的问题,我根据您的问题及其下方的评论列出了要求。

  • 您的输入包含几个 GB 大的文本文件,因此无法完全加载到内存中
  • 这些文本文件仅包含数值,每个值都在其自己的行上
  • 这些数值需要按排序顺序写入另一个输出文件

我并不完全清楚您的输入包含什么内容,因此您可能需要在这里更正我。您是否需要合并多个(较小的)输入文件,对合并的内容进行排序,然后将其输出到一个(较大的)文件中?

例子:

  • 输入:file1_unsorted.txt (6GB)、file2_unsorted.txt (6GB)
  • 输出:file1_and_file2_sorted.txt (12GB)

如果是这样,每个单独的文件是否足够小以加载到内存中(但不是组合的整体?)

示例(假设 1GB RAM):

  • 输入:file1_unsorted.txt (600MB), file2_unsorted.txt (600MB), ..., file10_unsorted.txt (600MB)
  • 输出:file1_through_file10_sorted.txt (6GB)

或者,每个单独的输入文件是否足够大以至于无法放入内存,并且这些文件是否都需要排序到相应的输出文件?

例子:

  • 输入:file_unsorted.txt (6GB)
  • 输出:file_sorted.txt (6GB)

假设您的(未排序的)输入和(排序的)输出文件都太大而无法放入内存,您需要一种方法来对这些文件的内容进行分块排序。您要查找的关键字是External Sort

这是 CodeProject 上的一个很好的例子(带有源代码和解释):对巨大的文本文件进行排序

您可能想研究一个有点相似的 StackOverflow 问题:Reading large text files with streams in C#

如果您在实际实施中需要任何帮助,请提供有关您的输入和(所需)输出的附加信息。文件本身显然太大而无法上传 - 包含输入和输出文件的目录屏幕截图也可以。然后我(和其他人)可以看到每个文件有多大以及它们需要聚合到什么程度(如果有的话)。

于 2015-04-04T19:33:23.513 回答