2016-04-11 11 views
1

Ich habe eine Textdatei, die n Zeile haben, habe ich einige Zeilen (angenommen 10 Zeilen) aus der vorhandenen Datei extrahiert. Jetzt möchte ich diese 10 Zeilen aus der vorhandenen Datei löschen und die neue Datei mit allen vorhandenen Daten erstellen, nachdem diese 10 Zeilen entfernt wurden.So entfernen Sie bestimmte Anzahl der Zeile aus der vorhandenen Datei und erstellen Sie eine neue Textdatei

private void ReWriteFile(string NewFileName) 
{    
    List<string> linetoDelete = _errorLine; 

    using (StreamReader reader = new StreamReader(_fileName)) 
    { 
     using (StreamWriter writer = new StreamWriter(NewFileName)) 
     { 
       // reading the old file remove the error line and create new file     

     } 
    } 
} 

Bitte helfen Sie mir mit Beispiel.

+0

Ich verstehe es nicht. Welches Problem hatten Sie mit Ihrem Code? –

Antwort

0
private void ReWriteFile(string NewFileName) { 

     List<String> _errorLine = new List<string>() { 
      "Error Line 1", "Error Line 2" 
     }; 

     String _fileName = "InputFile.txt"; 
     String _outputFile = NewFileName; 

     List<string> linetoDelete = _errorLine; 


     String[] sourceLines = File.ReadAllLines(_fileName); 

     if (sourceLines.Length > 0) { 
      using (StreamWriter writer = new StreamWriter(_outputFile)) { 
       foreach(String line in sourceLines) { 
        if (!_errorLine.Contains(line)) { 
         writer.WriteLine(line); 
        } 
       } 
      } 
     } 
    } 

Lesen und Schreiben von Dateien in Text ist ein rudimentäres Teil der Programmierung und Ihre Frage fehlt jegliche Beweise zu versuchen, das Problem selbst zu lösen.

Ein paar Punkte zu beachten.

1) Wenn Sie eine Textdatei zur Verarbeitung lesen, laden Sie das Los in ein Array von String Objekten. Die Quelle ändert sich während der Verarbeitung nicht. Sie müssen also kein Lesegerät geöffnet halten, das die Datei hält.

2) Löschen von Inhalt aus einer Datei ist ein schlechter Ansatz, da Sie möglicherweise die Datei während der Verarbeitung ändern. Dies führt zu Problemen, wenn Sie die Datei zu der Zeit auflisten (vorausgesetzt, Sie verwenden einen Reader in einer Schleife).

3) Mein Ansatz ist nicht perfekt - wenn die _errorLine Liste ist lang, und die Quelldatei ist auch lang, es wird eine Menge Anrufe zu prüfen, ob die _errorLines Liste ein bestimmtes String enthält. Es wird einen schnelleren Weg geben, dies zu tun, aber ich habe keine Zeit für umfangreiche Tests.

4) Als eine Folge zu Punkt 3 wird dieser Code nicht getestet und erfordert möglicherweise kleine Anpassungen, damit er richtig funktioniert.

Wenn Sie schließlich eine Frage zu SO stellen, zeigen Sie, dass Sie zumindest versucht haben, das Problem zu lösen, indem Sie uns ein Beispiel geben und uns bitten, Ihre Arbeit für Sie zu erledigen.

Informationen zum Lesen/Schreiben von Dateien finden Sie auf den folgenden Seiten.

Die Anzahl der frisch graduierten Programmierer, die ich gesehen habe, die grundlegende IO-Funktionen wie diese nicht codieren kann, ist etwas beunruhigend!

https://msdn.microsoft.com/en-GB/library/ezwyzy7b.aspx

https://msdn.microsoft.com/en-GB/library/aa287548%28v=vs.71%29.aspx

+0

Danke für die Erklärung, ich habe nie Interesse am Lesen/Schreiben von Dateien, die mein Leben irgendwann schwierig machen. – Rocky

+0

Dies ist das Problem. Als ich anfing zu programmieren, war es auf dem Atari ST, dann Basic für DOS. Das Lesen und Schreiben von Dateien in Low-Level-Sprachen ist eine Grundvoraussetzung, und jeder Programmierer sollte ohne Ausnahmen verstehen.In modernen Umgebungen ist der Dateizugriff für das Analysieren von Protokolldateien und das Verarbeiten von Konfigurationsdateien unerlässlich, und IMO zeigt, wenn man nicht weiß, wie man es richtig macht, eine Wissenslücke, die verschlossen werden muss. – Alex

+0

Es scheint so, als ob die Universität nur hochgradigen theoretischen Mist lehrt, aber keine Grundlagen wie 'HelloWorld' vermittelt. – Toxantron

1

versuchen Sie dies:

private void ReWriteFile(string _newFileName) 
    { 
     List<string> linetoDelete = _errorLine; 

     using (StreamReader reader = new StreamReader(_fileName)) 
     { 
      using (StreamWriter writer = new StreamWriter(_newFileName)) 
      { 
       string line; 
       while ((line = reader.ReadLine()) != null) 
       { 
        if(!linetoDelete.Contains(line)) 
         writer.WriteLine(line); 
       } 
      } 
     } 
    } 

Wenn Sie bestimmte Anzahl von Zeilen

string line; 
int index = 0; // index line from file 
while ((line = reader.ReadLine()) != null) 
{ 
    if (!index++ != number) // number - it is your specific number of line from '0' to 'N' (for example 'number = 1' - write all lines except for line number one) 
     writer.WriteLine(line); 
} 

entfernen möchten, wenn Sie viele Linien entfernen möchten:

List<int> numberOfDeleteLines = new List<int>() { 1, 2, 3 }; 
... 
string line; 
int index = 0; 
while ((line = reader.ReadLine()) != null) 
{ 
    if (!numberOfDeleteLines.Contains(index++)) 
     writer.WriteLine(line); 
} 
Verwandte Themen