1

これは、テキスト ファイルの最後の 3 行を削除するためにこれまで見てきたコードですが、string[] lines = File.ReadAllLines(); を特定するために必要です。私がそうする必要はありません。

string[] lines = File.ReadAllLines(@"C:\\Users.txt");
            StringBuilder sb = new StringBuilder();
            int count = lines.Length - 3; // except last 3 lines 
            for (int s = 0; s < count; s++)
            {
                sb.AppendLine(lines[s]);

            }

コードはうまく機能しますが、上記のストリームリーダーについて述べたように、ファイルを再読み込みしたくありません。

using (StreamReader r = new StreamReader(@"C:\\Users.txt"))

streamreaderを使用した後、私が知る限り、C#は初めてです。行を変更したい場合は、これを使用する必要があります:

while ((line = r.ReadLine()) != null)
{
#sample codes inside the bracket
                    line = line.Replace("|", "");
                    line = line.Replace("MY30", "");
                    line = line.Replace("E", "");
}

では、「while ((line = r.ReadLine()) != null)」内のファイルの最後の 3 行を削除する方法はありますか??

行を削除し、行を置き換え、さらにいくつかの変更を一度に行う必要があるため、同じテキストファイルを何度も開いたり読んだりして行を変更することはできません。私が尋ねる方法があなたたちにとって理解できることを願っています >.<

助けてください。質問が単純に聞こえることは知っていますが、解決する方法をたくさん検索しましたが、失敗しました =(

これまでのところ、私のコードは次のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication11
{
public class Read
{

    static void Main(string[] args)
    {

        string tempFile = Path.GetTempFileName();
        using (StreamReader r = new StreamReader(@"C:\\Users\SAP Report.txt"))
        {
            using (StreamWriter sw = new StreamWrite (@"C:\\Users\output2.txt"))
            {
                string line;

                while ((line = r.ReadLine()) != null)
                {
                    line = line.Replace("|", "");
                    line = line.Replace("MY30", "");
                    line = line.Replace("E", "");

                    line = System.Text.RegularExpressions.Regex.Replace(line, @"\s{2,}", " ");

                    sw.WriteLine(line);
                }
     }
            }
        }
    }
}

次のタスクは、ファイル内のこれらのコードの後の最後の 3 行を削除することです。これについては助けが必要です。

ありがとうございました。

4

3 に答える 3

3

File.ReadAllLinesを使用すると、既にファイルを読み取っているため、 string[] (置換と正規表現)内の各行を処理し、出力に書き込むことができます。それらを読み直してStringBuilderに入れる必要はありません。

于 2012-07-03T09:12:01.870 に答える
1

行を文字列ビルダーに直接追加する代わりに、行のリストを保持して後で結合することができます。そうすれば、最後の 3 行を簡単に除外できます。

リストに保持しなければならない行数を減らすために、定期的にリストの 1 行を追加して削除することができます。したがって、配列に 3 行のバッファーを保持し、バッファーに 4 行が含まれるたびに行をポップして追加します。

于 2012-07-03T09:14:13.123 に答える
1

前の 3 行の「ローリング ウィンドウ」を保持できます。

string[] previousLines = new string[3];
int index = 0;
string line;
while ((line = reader.ReadLine()) != null)
{
    if (previousLines[index] != null)
    {
        sw.WriteLine(previousLines[index]);
    }
    line = line.Replace("|", "")
               .Replace("MY30", "")
               .Replace("E", "");
    line = Regex.Replace(line, @"\s{2,}", " ");
    previousLines[index] = line;
    index = (index + 1) % previousLines.Length;
}
于 2012-07-03T09:11:05.683 に答える