0

多くの文字列と多くの置換を含むこのファイルがあり、文字列を置換で置き換えてから、テキストファイルを保存したいのですが、これは私が試したものですが、悪い仕事をしました:

StreamReader sr = new StreamReader(fullPath + "\\DICT_J.txt", Encoding.Unicode);
            string cdID;
            string str;
            while (sr.Peek() >= 0)
            {
                string[] temp = sr.ReadLine().Split('^');
                if (temp.Length == 3)
                {
                    cdID = temp[1];
                    str = temp[2];
                    File.WriteAllText(path, Regex.Replace(File.ReadAllText(path), str, cdID), Encoding.Unicode);
                }
            }
            sr.Close();
            sr.Dispose();

ここ(SOF では改行が許可されていないため、ここに投稿できませんでした) は、置換を含むファイルのサンプルであり、テンプレートは次のとおりです: 行 ID^置換^置換される文字列

4

1 に答える 1

2

これが役立つかどうかはわかりませんが、これらは私の推測です。これらのメソッドには、ここでは使用していませんが、あなたの場合に役立つ可能性がある Encoding の他のオーバーロードがあります。

1. 元のファイルの文字列を置換ファイルの LineID に置き換えます

public void Replace(string originalFile, string replacementsFile)
{
    var originalContent = System.IO.File.ReadAllLines(originalFile);
    var replacements = System.IO.File.ReadAllLines(replacementsFile);

    foreach(var replacement in replacements)
    {
        var _split = replacement.Split(new char[] { '^' });

        var lineNumber = Int32.Parse(_split[0]);

        // checks if the original content file has that line number and replaces
        if (originalContent.Length < lineNumber)
            originalContent[lineNumber] = originalContent[lineNumber].Replace(_split[1], _split[2]);
    }

    System.IO.File.WriteAllLines(originalFile, originalContent);
}

2. 別のファイルの置換テンプレートのすべての一致を置換します

public void Replace(string originalFile, string replacementsFile)
{
    var originalContent = System.IO.File.ReadAllText(originalFile);
    var replacements = System.IO.File.ReadAllLines(replacementsFile);

    foreach(var replacement in replacements)
    {
        var _split = replacement.Split(new char[] { '^' });

        originalContent = originalContent.Replace(_split[1], _split[2]);
    }

    System.IO.File.WriteAllText(originalFile, originalContent);
}
于 2013-09-26T22:54:18.773 に答える