コードが新しいファイルを作成できる場合は、それが望ましいでしょう。例: 私のファイルがもともと: fsyfugiuhknklmoiuiuuutyughvhjbiuhi jhiubuguygfvtdrcrsresetgfcyuhijoj の場合
必要な新しいファイルには、3 番目の位置ごとに新しい行文字が含まれています: fsy fug iuh knk ...
コードは何ですか?
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);
これはあなたを助けるかもしれません(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();
}
うーん...
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[]
使用して配列ブロック コピー操作を使用し、. 結果の文字列の長さは、ソース文字列の長さ L に L % n を加えた長さです。ここで、n は周期的な長さです。最後の [おそらく短い] セグメントに末尾の文字を追加する必要がある場合は、出力バッファーの長さに 1 を追加します。System.Buffer
BlockCopy
new String( outputBuffer )