web-dev-qa-db-ja.com

テキストファイルから特定の行を削除しますか?

テキストファイルから正確な行を削除する必要がありますが、これを実行する方法を自分のワークアウトで終わらせることはできません。

何か提案や例は大歓迎だろうか?

関連する質問

テキストファイル(C#)から行を削除する効率的な方法

25
Goober

削除する行が行の内容に基づいている場合:

string line = null;
string line_to_delete = "the line i want to delete";

using (StreamReader reader = new StreamReader("C:\\input")) {
    using (StreamWriter writer = new StreamWriter("C:\\output")) {
        while ((line = reader.ReadLine()) != null) {
            if (String.Compare(line, line_to_delete) == 0)
                continue;

            writer.WriteLine(line);
        }
    }
}

または、行番号に基づいている場合:

string line = null;
int line_number = 0;
int line_to_delete = 12;

using (StreamReader reader = new StreamReader("C:\\input")) {
    using (StreamWriter writer = new StreamWriter("C:\\output")) {
        while ((line = reader.ReadLine()) != null) {
            line_number++;

            if (line_number == line_to_delete)
                continue;

            writer.WriteLine(line);
        }
    }
}
40
Sean Bright

これを行う最良の方法は、ファイルをテキストモードで開き、ReadLine()を使用して各行を読み取り、WriteLine()を使用して新しいファイルに書き込み、削除する1行をスキップすることです。

私の知る限り、一般的なファイルからの行削除機能はありません。

13
Aric TenEyck

ファイルがそれほど大きくない場合にそれを行う1つの方法は、すべての行を配列にロードすることです。

string[] lines = File.ReadAllLines("filename.txt");
string[] newLines = RemoveUnnecessaryLine(lines);
File.WriteAllLines("filename.txt", newLines);
7
Darin Dimitrov

これを実際に簡単にするために、実際にC#ジェネリックを使用できます。

        var file = new List<string>(System.IO.File.ReadAllLines("C:\\path"));
        file.RemoveAt(12);
        File.WriteAllLines("C:\\path", file.ToArray());
2
DataDink

Rocket Scienコードは必要ありません。このシンプルで短いコードが help であることを願っています。

List linesList = File.ReadAllLines("myFile.txt").ToList();            
linesList.RemoveAt(0);
File.WriteAllLines("myFile.txt"), linesList.ToArray());

[〜#〜] or [〜#〜]use this

public void DeleteLinesFromFile(string strLineToDelete)
    {
        string strFilePath = "Provide the path of the text file";
        string strSearchText = strLineToDelete;
        string strOldText;
        string n = "";
        StreamReader sr = File.OpenText(strFilePath);
        while ((strOldText = sr.ReadLine()) != null)
        {
            if (!strOldText.Contains(strSearchText))
            {
                n += strOldText + Environment.NewLine;
            }
        }
        sr.Close();
        File.WriteAllText(strFilePath, n);
    }
  1. 各行を読んで覚える

  2. 取り除きたいものを特定する

  3. 忘れて

  4. 残りをファイルの先頭に書き戻します

1
Steve Gilham

これは、次の3つの手順で実行できます。

// 1. Read the content of the file
string[] readText = File.ReadAllLines(path);

// 2. Empty the file
File.WriteAllText(path, String.Empty);

// 3. Fill up again, but without the deleted line
using (StreamWriter writer = new StreamWriter(path))
{
    foreach (string s in readText)
    {
        if (!s.Equals(lineToBeRemoved))
        {
            writer.WriteLine(s);
        }
    }
}

何?ファイルを開いて、シーク位置を使用し、ヌルを使用して消去行をストリーミングします。

わかった?シンプル、ストリーム、メモリを消費する配列なし、高速。

これはvbで機能します。例:search line culture = idの場合、cultureはnamevalue、idはvalueであり、culture = enに変更したい

Fileopen(1, "text.ini")
dim line as string
dim currentpos as long
while true
    line = lineinput(1)
    dim namevalue() as string = split(line, "=")
    if namevalue(0) = "line name value that i want to edit" then
        currentpos = seek(1)
        fileclose()
        dim fs as filestream("test.ini", filemode.open)
        dim sw as streamwriter(fs)
        fs.seek(currentpos, seekorigin.begin)
        sw.write(null)
        sw.write(namevalue + "=" + newvalue)
        sw.close()
        fs.close()
        exit while
    end if
    msgbox("org ternate jua bisa, no line found")
end while

それだけです。#dを使用してください

0
user189590

Unixオペレーティングシステムを使用していますか?

これは、「sed」ストリームエディターを使用して実行できます。 「sed」のmanページを読んでください

0
user122299