0

次のようなテキストファイルがあります。

こんにちは
これはテキストファイルです
 * 何があるか教えてくれませんか
 * Dntケア
 * リスト項目

アスタリスク記号 (*) があるすべての行を削除したいので、削除後のファイルの結果は次のようになります。

こんにちは
これはテキストファイルです
4

4 に答える 4

5

LINQ はこれを簡単にします。

using System.IO;
using System.Linq;

...

File.WriteAllLines("output.txt",
                   File.ReadLines("input.txt")
                       .Where(line => !line.Contains("*")));

または2つのステートメントとして - それはまだ怠惰で、一度に1行しか読んでいません:

var query = File.ReadLines("input.txt").Where(line => !line.Contains("*"));
File.WriteAllLines("output.txt", query);

元のファイルを確実に置き換える必要がある場合は、上記を使用してから元のファイルを削除し、新しいファイルを所定の位置に移動する、(ファイルが十分に小さい場合) 最初にファイル全体を読み取ることができます。

var lines = File.ReadAllLines("file.txt").Where(line => !line.Contains("*"));
File.WriteAllLines("file.txt", lines);

これはReadAllLinesの代わりに を使用するため、ファイル全体ReadLinesを一度にメモリに読み込むことに注意してください。

これは、.NET 4 以降を使用していることを前提としています。.NET 3.5 のみを使用している場合でも、2 番目の形式を使用できますが、結果を書き出す前に配列に変換する必要があります。

var lines = File.ReadAllLines("file.txt")
                .Where(line => !line.Contains("*"))
                .ToArray();
File.WriteAllLines("file.txt", lines);
于 2013-03-20T19:33:29.610 に答える
2

ファイルの内容を読み書きする方法を知っていると仮定すると、 a を使用しRegexて不要な行を削除できます。これには、 * が行のどこかに存在するのではなく、行の先頭にある必要があるという利点があります。

Regex.Replace(fileContents, "(?m)(^\s*\*.*$)", "");

これRegexには、* の前に任意の数の空白があります。

于 2013-03-20T19:37:37.050 に答える
1

ファイル内の行を読み取ります。

string[] lines = File.ReadAllLines(filename);

アスタリスクで行を除外します。

string[] filtered = lines.Where(s => !s.Trim().StartsWith("*")).ToArray();

残りの行をファイルに書き込みます。

File.WriteAllLines(filename, filtered);
于 2013-03-20T19:34:33.483 に答える
0

行ごとに移動して、文字列に*が含まれているかどうかを確認してください

while(Reader.CanRead())
{
   string currLine = reader.ReadLine();
   if(currLine.Contains("*") == false)
       list.Add(currLine);
}
于 2013-03-20T19:34:39.547 に答える