テキストファイルから正確な行を削除する必要がありますが、これを実行する方法を自分のワークアウトで終わらせることはできません。
何か提案や例は大歓迎だろうか?
関連する質問
削除する行が行の内容に基づいている場合:
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);
}
}
}
これを行う最良の方法は、ファイルをテキストモードで開き、ReadLine()を使用して各行を読み取り、WriteLine()を使用して新しいファイルに書き込み、削除する1行をスキップすることです。
私の知る限り、一般的なファイルからの行削除機能はありません。
ファイルがそれほど大きくない場合にそれを行う1つの方法は、すべての行を配列にロードすることです。
string[] lines = File.ReadAllLines("filename.txt");
string[] newLines = RemoveUnnecessaryLine(lines);
File.WriteAllLines("filename.txt", newLines);
これを実際に簡単にするために、実際にC#ジェネリックを使用できます。
var file = new List<string>(System.IO.File.ReadAllLines("C:\\path"));
file.RemoveAt(12);
File.WriteAllLines("C:\\path", file.ToArray());
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);
}
各行を読んで覚える
取り除きたいものを特定する
忘れて
残りをファイルの先頭に書き戻します
これは、次の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を使用してください
Unixオペレーティングシステムを使用していますか?
これは、「sed」ストリームエディターを使用して実行できます。 「sed」のmanページを読んでください