2009-08-07 19 views

Odpowiedz

39

Jeśli linia chcesz usunąć opiera się na zawartości line:

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); 
     } 
    } 
} 

Lub jeśli jest ona oparta na linii numer:

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); 
     } 
    } 
} 
13

Najlepszym sposobem, aby to zrobić, to otworzyć plik w trybie tekstowym, czytać każdą linię readline(), a następnie zapisać go do nowego pliku z WriteLine(), pomijając jedną linię, którą chcesz usunąć.

Nie istnieje ogólna funkcja delete-a-line-from-file, o ile wiem.

+1

+1 za lepsze niż buforowanie wszystkich wierszy, a następnie odpisanie bez usuwania. –

1
  1. przeczytać i zapamiętać każdą linię

  2. zidentyfikować, który chcesz pozbyć z

  3. Zapomnij, że jeden

  4. Napisz resztę z powrotem na górze na plik

+0

Zapomnij o tym? Jak możesz to zrobić? –

7

Jednym ze sposobów, aby to zrobić, jeśli plik nie jest bardzo duży jest, aby załadować wszystkie linie do tablicy:

string[] lines = File.ReadAllLines("filename.txt"); 
string[] newLines = RemoveUnnecessaryLine(lines); 
File.WriteAllLines("filename.txt", newLines); 
+0

Tak, to jest prosta prosta metoda, o ile plik można z łatwością przechowywać w pamięci. – Noldorin

+0

Oczywiście ta metoda ma zastosowanie tylko wtedy, gdy zawartość pliku mieści się w pamięci, w przeciwnym razie należy zastosować metodę "przesyłania strumieniowego" i plik tymczasowy zgodnie z propozycją Aric TenEyck. –

2

rzeczywiście można używać C# rodzajowych do tego, aby uczynić go naprawdę proste:

 var file = new List<string>(System.IO.File.ReadAllLines("C:\\path")); 
     file.RemoveAt(12); 
     File.WriteAllLines("C:\\path", file.ToArray()); 
+0

Nie byłoby tak dobrze na dużych plikach, ale sprytniej niżej. – Gregory

+1

Problem polega na tym, że plik nie mieści się w pamięci ... –

0

Czy jesteś na systemie operacyjnym Unix?

Możesz to zrobić za pomocą edytora strumieni "sed". Przeczytaj stronę man dla "sed"

0

Co? Użyj pliku otwórz, wyszukaj pozycję, a następnie strumień usuń linię za pomocą null.

Gotch to? Prosty, strumień, bez tablic, które jedzą pamięć, szybko.

Prace na VB .. kultura Przykład linia search = id, gdzie kultura są namevalue a id to wartość i chcemy go zmienić na kulturę = pl

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 

to all..use #D

+1

Użyj 4 spacji na wcięcie w kodzie :) – Gregory

2

Żaden kod jądra nie wymaga .Przyprowadź ten prosty i krótki kod: help.

List linesList = File.ReadAllLines("myFile.txt").ToList();    
linesList.RemoveAt(0); 
File.WriteAllLines("myFile.txt"), linesList.ToArray()); 

LUB użycie 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); 
    } 
0

Można to zrobić w trzech krokach:

// 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); 
     } 
    } 
} 
Powiązane problemy