如何使用C#在大文本文件中的每n个字符后插入一个字符?

时间:2012-08-29 02:28:48

标签: c# file insert

如果代码能够创建新文件,那将是更好的选择。 例如:如果我的文件最初是: fsyfugiuhknklmoiuiuutyughvhjbiuhi jhiubuguygfvtdrcrsresetgfcyuhijoj

并且所需的新文件在每个第3个位置后包含一个新的行char: FSY 富格 IUH KNK ...

代码应该是什么。?

3 个答案:

答案 0 :(得分:3)

void InsertACharacterNoStringAfterEveryNCharactersInAHugeTextFileUsingCSharp(
    string inputPath, string outputPath, int blockSize, string separator)
{
    using (var input = File.OpenText(inputPath))
    using (var output = File.CreateText(outputPath))
    {
        var buffer = new char[blockSize];
        int readCount;
        while ((readCount = input.ReadBlock(buffer, 0, buffer.Length)) > 0)
        {
            output.Write(buffer, 0, readCount);
            if (readCount == buffer.Length)
                output.Write(separator);
        }
    }
}

// usage:
InsertACharacterNoStringAfterEveryNCharactersInAHugeTextFileUsingCSharp(
    inputPath, outputPath, 3, Environment.NewLine);

答案 1 :(得分:1)

这可能对你有帮助(我提供了在每n个字符后插入字符的基本逻辑......)

static void Main(string[] args)
        {
            var input = "fsyfugiuhknklmoiuiuutyughvhjbiuhi jhiubuguygfvtdrcrsresetgfcyuhijoj".ToCharArray();
            var elementsToConsider = 3;
            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < input.Length; i++)
            {
                sb.AppendLine(input.Skip(i).Take(elementsToConsider).Aggregate("",(a, b) => a + b));
                i = i + (elementsToConsider  -1);
            }
            Console.WriteLine(sb.ToString());
            Console.ReadKey();
        }

答案 2 :(得分:0)

嗯...

public string Tweak( string s , char c , int n )
{
  StringBuilder sb = new StringBuilder( s.Length + ( s.Length % n ) + 1 ) ;
  for ( int i = 0 ; i < s.Length ; ++i )
  {
    sb.Append( s[i] ) ;
    if ( i % n == 0 ) sb.Append( c ) ;
  }
  return sb.ToString() ;
}

这可能和你一样好。虽然使用char char[])数组和使用类System.Buffer的方法BlockCopy的数组块复制操作并通过new String( outputBuffer )实例化新字符串可能会获得更好的性能。 。结果字符串的长度是源字符串的长度L加上L%n,其中n是周期长度。如果末尾的最后[和可能短的]段应该添加尾随字符,则将1添加到输出缓冲区的长度。

相关问题