Kode saya sejauh ini
StreamReader reading = File.OpenText("test.txt");
string str;
while ((str = reading.ReadLine())!=null)
{
if (str.Contains("some text"))
{
StreamWriter write = new StreamWriter("test.txt");
}
}
Saya tahu cara menemukan teks, tetapi saya tidak tahu bagaimana cara mengganti teks dalam file dengan saya sendiri.
c#
.net
io
streamreader
file-handling
Menangkan Coder
sumber
sumber
Jawaban:
Baca semua konten file. Lakukan penggantian dengan
String.Replace
. Tulis konten kembali ke file.sumber
Regex.Replace
System out of memory
pengecualian.Anda akan kesulitan menulis ke file yang sama dengan yang Anda baca. Salah satu cara cepat adalah dengan melakukan ini:
Anda bisa menjelaskannya dengan lebih baik
sumber
ReadAllText
menutup akses file sebelumWriteAllText
. Saya menggunakan teknik ini di aplikasi saya sendiri.Anda perlu menulis semua baris yang Anda baca ke dalam file output, bahkan jika Anda tidak mengubahnya.
Sesuatu seperti:
Jika Anda ingin melakukan operasi ini di tempat maka cara termudah adalah dengan menggunakan file output sementara dan pada akhirnya ganti file input dengan output.
(Mencoba untuk melakukan operasi pembaruan di tengah file teks agak sulit untuk mendapatkan yang benar karena selalu memiliki penggantian dengan panjang yang sama adalah sulit mengingat sebagian besar pengkodean lebar variabel.)
EDIT: Daripada dua operasi file untuk mengganti file asli, lebih baik digunakan
File.Replace("input.txt", "output.txt", null)
. (Lihat MSDN .)sumber
Kemungkinan Anda harus menarik file teks ke dalam memori dan kemudian melakukan penggantian. Anda kemudian harus menimpa file menggunakan metode yang Anda ketahui dengan jelas. Jadi, pertama-tama Anda akan:
Anda kemudian dapat mengulang dan mengganti teks dalam array.
metode ini memberi Anda kendali atas manipulasi yang dapat Anda lakukan. Atau, Anda hanya bisa melakukan penggantian dalam satu baris
Saya harap ini membantu.
sumber
Inilah yang saya lakukan dengan file besar (50 GB):
Saya mencoba 2 cara berbeda: yang pertama, membaca file ke dalam memori dan menggunakan Regex Replace atau String Replace. Kemudian saya menambahkan seluruh string ke file sementara.
Metode pertama berfungsi dengan baik untuk beberapa penggantian Regex, tetapi Regex.Replace atau String.Replace dapat menyebabkan kesalahan memori jika Anda melakukan banyak penggantian dalam file besar.
Yang kedua adalah dengan membaca file temp baris demi baris dan secara manual membangun setiap baris menggunakan StringBuilder dan menambahkan setiap baris yang diproses ke file hasil. Metode ini cukup cepat.
sumber
sumber
saya cenderung menggunakan kode forward sederhana sebanyak yang saya bisa, kode di bawah ini bekerja dengan baik dengan saya
sumber