2017-05-11 6 views
-2

Ich habe diese Methode GetWordsArray unten, und wenn ich die Methode im Hauptprogramm aufrufen, druckt es nur ganze Sätze, die mit dem spezifischen Buchstaben von beginnen dieser ganze Satz.C# Wie drucken Sie Wörter, die mit einem bestimmten Buchstaben aus einer TXT-Datei beginnen

public static void GetWordsArray(string path, string toFind) 
{ 
    string[] words = File.ReadAllLines(path); 
    if (File.Exists(path)) 
    {    
     foreach (string line in words) 
     { 
      if(line.StartsWith(toFind)) 
      { 
       Console.WriteLine(line); 
      }     
     } 
    } 
    else 
    { 
     Console.WriteLine("Directory not found"); 
    } 
} 

Dies ist, was es druckt aus der txt-Datei:

Orangen Sie haben keine rote Pflaumen auf einem kleinen Muskatnuss. RAGOUT OF LAMB A GUTE RISSOLES Hacken Sie einige Artischocken-Bottoms, die durch das Rollen des gelben Aspiks gekocht werden, und werfen Sie ihnen ein Fünf-Franken-Stück zu.

Ich will es es so drucken, wenn die bestimmten Buchstaben ein o zum Beispiel: orangesOF usw.

Dies ist, wie ich die Methode im Hauptprogramm aufrufen:

Reader r = new Reader();    
string path = @"randomtext.txt"; 
Reader.GetWordsArray(path, "o"); 

Wie kann ich alle Wörter aus der Textdatei ausdrucken, die zB mit dem Buchstaben o beginnen?

+1

_string [] words = File.ReadAllLines (Pfad); _ gibt ein Array von Zeilen in der Datei zurück, nicht ein Array von Wörtern. Sie müssen jede Zeile aufteilen - auf Leerzeichen und Interpunktion. Wahrscheinlich möchten Sie auch einen Vergleich ohne Groß-/Kleinschreibung vornehmen: https://msdn.microsoft.com/en-us/library/ms131452(v=vs.110).aspx – PaulF

Antwort

0

Ihre Textdatei hat nur 1 Zeile scheint, und da Ihre lange Satz beginnt mit einem o druckt es die gesamte Zeile. Entweder Sie formatieren Sie Ihre Datei, so dass jedes Wort in einer Zeile befindet, oder Sie spalten jede Zeile und durchlaufen die Elemente und tun Sie es überprüft:

if (File.Exists(path)) 
{ 
    string[] words = File.ReadAllLines(path); 

    foreach (string line in words) 
    { 
     string [] elements = line.Split(' '); 
     foreach (string elem in elements) 
     { 
      if (elem.StartsWith(toFind)) 
      { 
       Console.WriteLine(elem); 
      } 
     } 
    } 
} 

jetzt die einzige Ausgabe Orangen sein sollte und auf

+0

Es druckt immer noch ganze Sätze x4, ich will es nur pro Wort. Gibt es eine Möglichkeit, jedes einzelne Wort in jeder Zeile zu teilen? – meesie1

+0

Ich habe es, aber Sie ausgedruckt: Zeile statt: elem. Also muss es sein: Console.WriteLine (elem); – meesie1

+0

@ meesie1 sorry dafür, dumme Kopie Paste Fehler. änderte es. –

0

Außerdem lesen Sie jede Zeile, die Sie brauchen, um jede Zeile in Wörter zu teilen und in jedem Wort Ihre Zeichenfolge zu suchen. Sie können es auf diese Weise tun:

if (File.Exists(path)) 
    { 
     string[] lines = File.ReadAllLines(path); 
     foreach (var line in lines) 
     { 
      var words = line.Split(' '); 
      foreach (var word in words) 
      { 
       if (word.StartsWith(toFind)) 
       { 
        Console.WriteLine(word); 
       } 
      } 
     } 
    } 
    else 
    { 
     Console.WriteLine("Directory not found"); 
    } 

Und auch File.Exists(path) überprüfen, bevor File.ReadAllLines(path)

+0

Aus welchem ​​Grund müssen Sie zuerst das 'File.Exists (path)' aufrufen? – meesie1

+0

@ meesie1 Datei.ReadAllLines (Pfad) wird FileNotFoundException auslösen, wenn die Datei nicht existiert –

0

Statt Lesezeile nacheinander Verwendung File.ReadAllText Method als Eingabe Ihre gesamte Datei zu haben, aufrufen. wie folgt aus:

string input = 
    @"oranges you have no red plums on a little nutmeg. RAGOUT OF LAMB A GOOD RI 
    oranges you have no red plums on a little nutmeg. RAGOUT OF LAMB A GOOD RI 
    oranges you have no red plums on a little nutmeg. RAGOUT OF LAMB A GOOD RI 
    SSOLES Mince some artichoke-bottoms cooked by rolling the yellow asp 
    ic, and throw them a five-franc piece."; 

slipt dieser Text über den Weltraum und Environnement Newline und Linie, was Sie suchen:

var arrayOfWord= input.Split( new[] { " ","\r\n", "\n" } 
          , StringSplitOptions.RemoveEmptyEntries); 

string toFind = "o"; 
var result = arrayOfWord.Where(y=> y.StartsWith(toFind)); 

Sie haben nun Ihre Liste von Wort. Und wenn Sie sie drucken möchten, sollte eine einfache foreach den Trick machen.

Verwandte Themen