2016-09-05 2 views
0

Ich habe diesen Code, der Doppel mit ungeraden Indexen findet alle mit "X" zu ersetzen, außer ersten mit ungeraden Index, sondern behält alle Doppelgänger mit geraden Indizes. Frage ist, wie gefundene Zeile im Textdokument ersetzt wird. So kann ich Ergebnis bekam, die ersetzt werden müssen, aber wie Zeilen in Textdokument zu überschreibenErsetzen gefundene Zeile in Textdokument

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = "test.txt"; 
     static void Main(string[] args) 
     { 
      List<string> uniqueOddLines = new List<string>(); 
      List<string> lines = new List<string>(); 
      string inputLine = "X"; 
      StreamReader reader = new StreamReader(FILENAME); 
      int index = 0; 
      while ((inputLine = reader.ReadLine()) != null) 
      { 
       inputLine = inputLine.Trim(); 
       if (++index % 2 == 0) 
       { 
        lines.Add(inputLine); 
       } 
       else 
       { 
        if (uniqueOddLines.Contains(inputLine)) 
        { 
         lines.Add(string.Format("Rewrite line {0}", index)); 
        } 
        else 
        { 
         uniqueOddLines.Add(inputLine); 
         lines.Add(inputLine); 
        } 
       }  
      } 
      foreach (string line in lines) 
      { 
       Console.WriteLine(line); 
      } 
      Console.ReadLine(); 
     } 
    } 
} 

Zum Beispiel Inhalt in Textdokument ist:

row1 
row2 
row3 
row4 
row5 
row6 
row3 
row8 
row9 
row3 
row11 
row3 
row3 
row3 

Arbeit von bestimmtem Code:

01. row1 
02. row2 
03. row3 <- keep row with odd index because it is first in order 
04. row4 
05. row5 
06. row6 
07. row3 <- rewrite this double because it is not the first one with odd index 
08. row8 
09. row9 
10. row3 <- keep this double, because row index is even number 
11. row11 
12. row3 <- keep this double, because row index is even number 
13. row3 <- rewrite this double because it is not the first one with odd index 
14. row3 <- keep this double, because row index is even number 

Und hier ist das gewünschte Ergebnis, das gleiche wie oben, aber ich möchte es in Textdokument:

row1 
row2 
row3 
row4 
row5 
row6 
X 
row8 
row9 
row3 
row11 
row3 
X 
row3 
+0

Könnten Sie bitte ein Beispiel für die Ausgangsdaten und die erwartete Ausgabe angeben? –

+0

Sie können bestimmte Zeilen in einem Textdokument nicht überschreiben, Sie müssen das gesamte Dokument überschreiben. Zum Glück haben Sie bereits den gewünschten Inhalt in den Zeilen. Schreiben Sie es einfach in eine Datei mit dem gleichen Namen. – enkryptor

+0

@Dmitry Bychenko getan Ich habe es über –

Antwort

0

Ich schlage vor, mit Linq: ReadLines die Datei Linien zurückkehren und Select ist bequem, die Logik innerhalb umzusetzen:

const string FILENAME = "test.txt"; 

// Side effect (adding into the set while selecting) is very convenient in the context, 
// but should be implemented with care 
HashSet<String> appeared = new HashSet<String>(); 

var result = File 
    .ReadLines(FILENAME) 
    // index % 2 == 0 since index is zero-based 
    .Select((line, index) => !appeared.Add(line.Trim()) && (index % 2 == 0) 
    ? "X" 
    : line) 
    .ToList(); // materialization, in case you want both Console and File 

foreach (var line in result) 
    Console.WriteLine(line); 

Console.ReadLine(); 

Falls Sie die Zeilen zurück zur Datei sowie auf Konsole schreiben wollen :

File.WriteAllLines(FILENAME, result); 
+0

.hallo, auf diese Weise bekam ich anderes Ergebnis 'row1 row2 row3 row4 row5 row6 row3 row8 row9 X row11 X row3 X' und in Dokument Ich habe dies: ' line1 X line3 X line5 X line3 X LINE9 X Leitung 11 X line3 X' –

+0

@zrubi: sorry, sollte es '(Index% 2 == 0)', sehen meine bearbeiten –

+0

nicht sicher, was ich falsch mache, habe ich absolut richtige Ergebnis mit Ihr Code auf der Konsole, sondern in dem Textdokument, ganz gleich, um neue Datei in die gleichen schreiben (ich brauche gleich) ich dieses Ergebnis bekam wieder 'X row2 X row4 X row6 X row8 X row3 X row3 X row3' –

Verwandte Themen