2016-08-13 2 views
2

Ich bin neu mit C# benötige Ihre HilfeVermeiden Sie das Schreiben von gleich vorhandenen Zeilen zum Textdokument

In diesem Code schreibe ich ein Wort oder eine Phrase in Textdokument mit Zyklusschleife. Meine Frage ist, wie man das Schreiben der gleichen Zeile vermeidet, die bereits im Textdokument vorhanden ist und es im Textdokument findet, auf Ausgabe zeigen?

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

namespace program_1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      int i = 0; 

      for (;;) 
      { 

       Console.Write("Write phrase: "); 
       var row = Console.ReadLine(); 

       Console.WriteLine(i++ + ". " + (row)); 

       TextWriter tsw = new StreamWriter("lines.txt", true); 

       tsw.WriteLine(row); 

       tsw.Close(); 

      } 

      Console.Read(); 
     } 
    } 
} 

Antwort

1

Wenn Sie vermeiden möchten, doppelte Zeilen in Ihrer Datei zu schreiben, benötigen Sie einen anderen Ansatz. Zuerst müssen Sie alle Ihre Leitungen im Speicher haben, dann überprüfen Sie, ob der Benutzer eine Zeile bereits im Speicher gibt, dann ist alles am Ende des Programms schreiben

class Program 
{ 
    static void Main(string[] args) 
    { 

     int i = 0; 
     List<string> wordsTyped = new List<string>(); 

     // If the file already exists then you can load its content 
     // in memory to start your checks against the current content 
     // of the file.... 
     if(File.Exists("lines.txt")) 
      wordsTyped.AddRange(File.ReadAllLines("lines.txt")); 

     for (;;) 
     { 

      Console.Write("Write phrase: (type 'exit' to end)"); 
      string row = Console.ReadLine(); 

      // Provide a way to exit from this infinite loop 
      if(row == "exit") 
       break; 

      Console.WriteLine(i++ + ". " + (row)); 

      // Use IndexOf to find if there is a match for your row 
      // and in which position in the List<string> 
      int position = wordsTyped.IndexOf(row); 
      if (position != -1) 
       Console.WriteLine($"Already inserted. Found match at line {position+1} , type again"); 
      else 
      { 
       wordsTyped.Add(row); 

       // It of uttermost importance to enclose the StreamWriter 
       // in a using statement to be sure to close and dispose it 
       // after the write, otherwise you could lock yourself out 
       using(StreamWriter sw = File.AppendText("lines.txt")) 
        sw.WriteLine(row); 
      } 
     } 
     // File.WriteAllLines("lines.txt", wordsTyped.ToArray()); 
     Console.Read(); 
    } 
} 
+1

Sie verfehlten hsve 'break' nach der letzten' Console .WriteLine'. Und geschweifte Klammern :) –

+0

@HamletHakobyan Ich denke, das OP will die Eingabe fortsetzen, aber Sie haben einen Punkt. – Steve

+0

Ich meine 'weiter' :) –

Verwandte Themen