首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在大文本文件中插入换行符

如何在大文本文件中插入换行符
EN

Stack Overflow用户
提问于 2011-11-22 00:37:58
回答 3查看 2.4K关注 0票数 1

我有一个很大的文本文件(如1 1gb),我需要每40个字符插入换行符。

如何使用streamReader做到这一点?

我试着使用ReadBLock,但似乎不能使它工作。到目前为止,代码如下:

代码语言:javascript
复制
int index = 0;
try
{
    using (StreamReader sr = new StreamReader(@"C:\bigfile.txt"))
    {
        char [] buf = new char [1024];
        //sr.ReadBlock (buf, 0, 40);
        while (sr.ReadBlock (buf, index, 40) != 0)
        {
            using (StreamWriter sw = new StreamWriter(@"C:\bigfilelinebreak.txt"))
            {
                //Console.WriteLine(buf);
                sw.Write (buf);
                sw.WriteLine(Environment.NewLine);
            }
            index += 40;
        }

    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-22 00:45:25

有几个问题:

  1. 您无需增加索引-始终只写入索引0。
  2. 您正在为每个数据块重新创建StreamWriter。
  3. 您可能写出了错误的字符数(您没有检查读取的字符数,在文件末尾,可能小于40)

尝试以下操作:

代码语言:javascript
复制
    try
    {
        using (StreamReader sr = new StreamReader(@"C:\bigfile.txt"))
        {
            using (StreamWriter sw = new StreamWriter(@"C:\bigfilelinebreak.txt"))
            {
                char [] buf = new char[40];
                int read = sr.ReadBlock (buf, 0, 40);
                while (read != 0)
                {
                    sw.Write(buf, 0, read);
                    sw.WriteLine();
                    read = sr.ReadBlock (buf, 0, 40);
                }
            }
        }
    }
票数 1
EN

Stack Overflow用户

发布于 2011-11-22 00:45:07

您正在为每个ReadBlock创建一个新的StreamWriter。(我不知道new StreamWriter(@"filename")的行为,但我打赌这不是你希望发生的事情)。此外,ReadBlockindex参数是目标数组的索引,而不是文件的索引。因此,对于每次读取,它都应该为0。您不需要考虑文件中的位置,因为您是按顺序从一个流到另一个流。StreamReader/Writer将相应地移动底层流。

代码语言:javascript
复制
    char [] buf = new char [40];
    int amtRead;
    using (StreamReader sr = new StreamReader(@"C:\bigfile.txt"))
    using (StreamWriter sw = new StreamWriter(@"C:\bigfilelinebreak.txt"))
    while ((amtRead = sr.ReadBlock (buf, 0, 40)) != 0)
    {
        sw.WriteLine (buf, 0, amtRead);
    }
票数 1
EN

Stack Overflow用户

发布于 2011-11-22 00:47:43

目前,您正在重写每一行的输出文件。这显然不是一个好计划。

我怀疑你想要这样的东西:

代码语言:javascript
复制
using (TextReader reader = File.OpenText(@"c:\bigfile.txt"))
{
    using (TextWriter writer = File.CreateText(@"C:\bigfilelinebreak.txt"))
    {
        char[] buffer = new char[40];
        int charsRead;
        while ((charsRead = reader.ReadBlock(reader, buffer, buffer.Length)) > 0)
        {
            writer.Write(buffer, 0, charsRead);
            writer.WriteLine();
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8215197

复制
相关文章

相似问题

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