次のようなテキストファイルがあります。
こんにちは これはテキストファイルです * 何があるか教えてくれませんか * Dntケア * リスト項目
アスタリスク記号 (*) があるすべての行を削除したいので、削除後のファイルの結果は次のようになります。
こんにちは これはテキストファイルです
次のようなテキストファイルがあります。
こんにちは これはテキストファイルです * 何があるか教えてくれませんか * Dntケア * リスト項目
アスタリスク記号 (*) があるすべての行を削除したいので、削除後のファイルの結果は次のようになります。
こんにちは これはテキストファイルです
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);
ファイルの内容を読み書きする方法を知っていると仮定すると、 a を使用しRegex
て不要な行を削除できます。これには、 * が行のどこかに存在するのではなく、行の先頭にある必要があるという利点があります。
Regex.Replace(fileContents, "(?m)(^\s*\*.*$)", "");
これRegex
には、* の前に任意の数の空白があります。
ファイル内の行を読み取ります。
string[] lines = File.ReadAllLines(filename);
アスタリスクで行を除外します。
string[] filtered = lines.Where(s => !s.Trim().StartsWith("*")).ToArray();
残りの行をファイルに書き込みます。
File.WriteAllLines(filename, filtered);
行ごとに移動して、文字列に*が含まれているかどうかを確認してください
while(Reader.CanRead())
{
string currLine = reader.ReadLine();
if(currLine.Contains("*") == false)
list.Add(currLine);
}