2016-06-02 5 views
0

Ich habe eine Datei mit Textzeilen, die ich in ein Array (Suche) eingelesen habe. Ich habe ein mehrzeiliges Textfeld, dessen Inhalt mit einem Knopfklick in ein Array (Linien) eingefügt wird. Ich versuche das erste Array mit jedem Element aus dem zweiten Array zu suchen und füge die gefundene Zeile zu einem listView hinzu .Konvertieren Sie mehrzeilige Textbox-Elemente in ein Array und suchen Sie dann nach diesen Elementen in einem anderen Array.

Ich bekomme Null für Artikel in der foreach-Schleife. Ich habe versucht, die foreach-Anweisung mit den Zeilen und Sucharrays ohne Änderung auszutauschen.

Weitere Informationen, sagen die items.lst enthält Folgendes.

Cats have four legs 
Dogs have four legs 
Horses have four legs 
Elephants have four legs 

Im mehrzeilige Textfeld der Benutzer Hunde und die nächste Zeile Pferde, was ich will in der Listenansicht angezeigt, wenn sie die Taste drücken ist:

Dogs have four legs 
Horses have four legs 

    public Form1() 
    { 
     InitializeComponent(); 
     txtIndex.Text = @"c:\temp\items.lst"; 
     listView1.Columns.Add("Item", 100, HorizontalAlignment.Left); 
    } 

    private void btnSearch_Click(object sender, EventArgs e) 
    { 
     const string index = @"items.lst"; 
     string[] search = System.IO.File.ReadAllLines(index); 
     string[] sep = {"\r\n"}; 
     string[] lines = txtList.Text.Split(sep, StringSplitOptions.RemoveEmptyEntries); 
     foreach (string item in lines.Where(item => search.Contains(item))) 
     { 
      listView1.Items.Add(item + Environment.NewLine); 
     } 
    } 

Dank

6/6/2016 Ich endete mit dem folgenden was funktionierte.

private void btnSearch_Click(object sender, EventArgs e) 
{ 
    const string index = @"items.lst"; 
    string[] search = System.IO.File.ReadAllLines(index); 
    string[] sep = { "\r\n", "\n", "\r" }; 
    string[] lines = txtList.Text.Split(sep, StringSplitOptions.RemoveEmptyEntries); 
    foreach (string line in search) 
    { 
     foreach (string item in lines) 
     { 
      if (line.Contains(item)) 
      { 
       listView1.Items.Add(line + Environment.NewLine); 
      } 
     } 
    } 
} 

Und LINQ Version

foreach (string line in from line in search from item in lines where line.Contains(item) select line) 
     { 
      listView1.Items.Add(line + Environment.NewLine); 
     } 
+0

Was bedeutet, dass Sie "Null für Artikel in der foreach-Schleife" erhalten? 'null' oder eine' NullReferenceException'? 'String.split' gibt niemals' null' zurück, darum frage ich. –

+0

FYI, benutze 'ReadLines' anstelle von' ReadAlllines', es wird dir ein 'IEnumerable' zurückgeben, anstatt dass du alles selbst aufteilst. –

+0

@Tim Schmelter debugging die foreach Linie Ich bekomme Artikel | null, wenn ich den Mauszeiger über die Variable halte, sollte es etwas aus dem mehrzeiligen Textfeld sein. – Exception

Antwort

0

Zuerst ändern Separator Array als

string[] sep = { "\r\n", "\n", "\r" }; 

Gerade Trim add() Funktion (Less obligatorisch)

foreach (string item in lines.Where(item => search.Contains(item.Trim()))) 
{ 
      listView1.Items.Add(item + Environment.NewLine); 
} 

Ich hoffe, es wird dir helfen.

0

ich modifizierte Code verwenden diese

private void btnSearch_Click(object sender, EventArgs e) 
    { 
     const string index = @"items.lst"; 
     string[] search = System.IO.File.ReadAllLines(index); 
     string[] sep = {"\r\n"};   
     foreach (string item in search) 
     { 
      var myitem = lines.Cast<string>().Where(i => item.Contains(i)).FirstOrDefault(); 
      if (myitem != null && myitem.Trim().Length > 0) 
       listView1.Items.Add(myitem + Environment.NewLine); 

     } 
    } 

Hope this Ihnen helfen.

Verwandte Themen