如果代碼能夠創建一個新文件,將會更好。 例如:如果我的文件最初是: fsyfugiuhknklmoiuiuutyughvhjbiuhi jhiubuguygfvtdrcrsresetgfcyuhijoj如何在使用C#的巨大文本文件中的每n個字符之後插入一個字符?
和希望的新的文件包含了每一個第三的位置後,新的行字符: FSY 富格 IUH KNK ...
又該成爲代碼。?
如果代碼能夠創建一個新文件,將會更好。 例如:如果我的文件最初是: fsyfugiuhknklmoiuiuutyughvhjbiuhi jhiubuguygfvtdrcrsresetgfcyuhijoj如何在使用C#的巨大文本文件中的每n個字符之後插入一個字符?
和希望的新的文件包含了每一個第三的位置後,新的行字符: FSY 富格 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);
這看起來非常有效。代碼很短,功能是動態的。 – Ishikawa
這可能會幫助你(我每天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[]
)和使用類System.Buffer
的方法BlockCopy
的陣列塊複製操作可以獲得稍好的性能,並通過new String(outputBuffer)
實例化新字符串。結果字符串的長度是源字符串的長度L,加上L%n,其中n是週期長度。如果末尾的最後[可能較短的]段應添加尾隨字符,請將1添加到輸出緩衝區的長度。
訪問每個字符,如果(currentIndex%n == 0){//代碼插入字符}這是O(N)。 –