Entwickler-Ecke

Basistechnologien - generische Liste durchsuchen und gefundenen Wert markieren


Talemantros - So 02.03.14 17:20
Titel: generische Liste durchsuchen und gefundenen Wert markieren
Hallo zusammen,
ich möchte gern, die Ordner von 2 Laufwerken in einer Listbox anzeigen lassen.
Weiterhin soll dann gesucht werden können, ob ein Wert gefunden wurde. Ich möchte aber nicht den genauen Inhalt eingeben müssen, sondern würde gern auch über Fragmente suchen.
Bekomme es aber leider nicht hin.
Im MOment lese ich beide Ordner in ein Array ein und füge sie einer generischen Liste hinzu, die ich in der Listbox anzeige.
Mit dem Suchen stehe ich völlig auf dem Schlauch?!

Sollte meine Idee ans Ziel zu kommen völlig falsch sein, würde ich mich auch über einen anderen Denkansatz freuen.

Vielen Dank

Gruß
Daniel


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace OrdnerAuslesen2
{
    public partial class Form1 : Form
    {
        List<string> neueListe = new List<string>();
        
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            DirectoryInfo ordnerNamen = new DirectoryInfo(@"S:\OBDMV\");
            DirectoryInfo ordnerNamen2 = new DirectoryInfo(@"S:\BDMV\");

            DirectoryInfo[] eingelesen = ordnerNamen.GetDirectories();
            DirectoryInfo[] eingelesen2 = ordnerNamen2.GetDirectories();

            foreach (DirectoryInfo info in eingelesen)
                neueListe.Add(info.Name);

            foreach (DirectoryInfo info in eingelesen2)
                neueListe.Add(info.Name);

            neueListe.Sort();
            foreach (string ordner in neueListe)
            {
                lstOrdner.Items.Add(ordner);                
            }
        }

        private void txtSuche_TextChanged(object sender, EventArgs e)
        {

        }

        private void Form1_Activated(object sender, EventArgs e)
        {
            txtSuche.Focus();
        }

    }
}


Christian S. - So 02.03.14 17:34

Hallo!

Das Suchen nach Einträgen kann man auf verschiedene Weise erledigen. Wenn Du nur die Einträge haben willst und es Dir egal ist, wo sie in der Liste stehen, geht das am Einfachsten so:

C#-Quelltext
1:
var ergebnisse = neueListe.Where(s => s.ToLower().Cotnains("Suchwort".ToLower())).ToArray()                    


Da Du im Titel etwas davon schreibst, dass Du die Einträge markieren willst, brauchst Du aber wahrscheinlich die Positionen der gefundenen Einträge in der Liste. Dann geht wahrscheinlich kein Weg dran vorbei, da durchzuiterieren:

C#-Quelltext
1:
2:
3:
4:
5:
var resultIdx = new List<int>();

for(int i = 0; i < neueListe.Count; i++)
  if(neueListe[i].ToLower().Contains("Suchwort".ToLower()))
    resultIdx.Add(i);


In beiden Fällen muss "Suchwort" in dem String ernhalten sein, aber er muss nicht genau identisch zu "Suchwort" sein, durch ToLower wird auch Groß- und Kleinschreibung nicht beachtet. Wobei es natürlich sinnvoller ist, das Suchwort nur einmal "klein zu machen".

Viele Grüße
Christian


Talemantros - Mi 05.03.14 23:32

Hallo,
entschuldigt die späte Rückmeldung. Irgendwie ist zu viel los :-(
Ich werde das morgen mal testen und eine Rückmeldung geben.

Beim einfachen Überfliegen verstehe ich aber folgende Zeile nicht.


C#-Quelltext
1:
var resultIdx = new List<int>();                    


Bisher kenne ich nur Konstruktionen wie


C#-Quelltext
1:
List<int> resultIdx = new List<int>();                    


Kann mir das jemand erleäutern?

Vielen Dank

Gruß
Daniel


Ralf Jansen - Mi 05.03.14 23:45

var ist einfach ein Platzhalter für den tatsächlichen Typ. Da die rechte Seite einen eindeutigen Typen definiert kann man sich den sparen auf der linken Seite nochmal hinzuschreiben.
Details gibts in der Doku [http://msdn.microsoft.com/de-de/library/bb383973.aspx].


Talemantros - Sa 08.03.14 10:54

Vielen Dank,
habe das eingebaut und etwas verändert und funktioniert für meine Zwecke sehr gut.

Vielen Dank

Schönes Wochenende

Gruß
Daniel