亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 .txt 文件中刪除所有行,以特定單詞開頭的行除外

從 .txt 文件中刪除所有行,以特定單詞開頭的行除外

C#
慕少森 2023-05-14 16:48:49
我正在嘗試創建一個程序,該程序將從文本文件中讀取所有行并刪除所有文本,但以“第 1 行:、第 2 行:、第 3 行:”等開頭的行除外。UPDATE謝謝你的所有建議。這是最終的工作代碼://PROCEDURE        private void Procedure()        {            // READ AND APPEND LINES            var file_path = @"Tags.txt";            var sb = new StringBuilder();            foreach (var line in File.ReadLines(file_path))            {                if (Regex.IsMatch(line, @"^Line\s+[0-9]+:") || (Regex.IsMatch(line, @"^Zeile\s+[0-9]+:") || (Regex.IsMatch(line, @"^Linea\s+[0-9]+:"))))                {                    sb.AppendLine(line);                }            }            // SAVE BACK            File.WriteAllText(file_path, sb.ToString());        }        private void btnRefine_Click(object sender, RoutedEventArgs e)        {            Procedure();        }歡迎對代碼進行任何改進。
查看完整描述

3 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

void ProcessFile()

{

    var file_path = @"Tags.txt";

    var sb = new StringBuilder();

    foreach (var line in File.ReadLines(file_path))

    {

        if (!Regex.IsMatch(line, @"^Line\s+[0-9]+:"))

        {

            sb.AppendLine(line);

        }

    }

    // Save back

    File.WriteAllText(file_path, sb.ToString());

}

更新

您可以改用 LINQ。那么之前的代碼會是這樣的:


void ProcessFile()

{

    var file_path = @"Tags.txt";

    File.WriteAllLines(file_path, File.ReadLines(file_path).Where(line => !Regex.IsMatch(line, @"^Line\s+[0-9]+:")));

}


查看完整回答
反對 回復 2023-05-14
?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

我會利用File.ReadAllLines和File.WriteAllLines來執行文件 IO。它們很方便,因為它們允許您輕松地對文件的所有行使用 LINQ 樣式的操作。這是以將整個文件讀入內存為代價的——這對于大小為許多 GB 的文件可能不切實際。

LINQWhere子句允許您根據您選擇的謂詞過濾行。

保持一條線的標準是它以你的Line 123:模式開始。這可以使用像 . 這樣的正則表達式來表達?^Line\s+\d+:。這基本上要求該行Line以一些空格開頭,然后是一些數字,然后是一個冒號。?Regex.IsMatch將允許您測試每一行是否與正則表達式匹配。

這是一個單行:

File.WriteAllLines("output.txt",?File.ReadAllLines("input.txt")
????.Where(line?=>?Regex.IsMatch(line,?"^Line\s+\d+:")));


查看完整回答
反對 回復 2023-05-14
?
當年話下

TA貢獻1890條經驗 獲得超9個贊

將所有行作為列表獲取后,您可以簡單地使用 RemoveAll 刪除這樣的行,


List<string> lines = new List<string> (File.ReadAllLines("Tags.txt"));

lines.RemoveAll(line => !Regex.IsMatch(line, @"^Line\s+\d+:");

using (StreamWriter fw = new StreamWriter(new FileStream("TagsNew.txt", FileMode.CreateNew, FileAccess.Write)))

{

   foreach (string line in lines)

   {

       fw.WriteLine(line);

   }

}

希望這可以幫助。


查看完整回答
反對 回復 2023-05-14
  • 3 回答
  • 0 關注
  • 252 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號