2016-09-30 2 views
0

Mit Benutzer Inpit in ein Textfeld möchte ich suchen, welche Datei in dem Verzeichnis diesen Text enthält. Ich würde dann gerne die Informationen analysierenC# durchsuchen Sie alle Dateien in einem Verzeichnis, die eine Zeichenfolge enthalten, und geben Sie diese Zeichenfolge zurück

aber ich kann nicht scheinen, um die Zeichenfolge zu finden oder zumindest die Informationen zurückgeben. Jede Hilfe würde sehr geschätzt werden.

Mein aktueller Code:

private void btnSearchSerial_Click(object sender, EventArgs e) 
{ 
    dynamic dirScanner = @"\\mypath\"; 
    string strSerial; 
    string strSID; 
    string strInputLine; 
    string strOutput; 

    strSerial = Convert.ToString(txtSerialSearch); 
    strSID = Convert.ToString(txtSID); 

    if (txtSerialSearch.Text != "" && txtSID.Text != "") 
    { 
     try 
     {      
       string[] allFiles = Directory.GetFiles(dirScanner); 

       foreach (string file in allFiles) 
       { 
        if (file.EndsWith(".txt"))        
        { 
         using (StreamReader sr = new StreamReader(file)) 
         { 
           while (sr.Peek() >= 0) 
           { 
            strInputLine = sr.ReadLine(); 

            if (strInputLine.Contains(strSerial)) 
            { 
             strOutput = Convert.ToString(strInputLine); 
             lblOutput.Text = Convert.ToString(strOutput); 
            } 
           } 
         } 
        } 
       } 
     } 
    } 
} 
+3

Was ist die Frage? –

+1

Wie bekomme ich den Benutzer eingegeben TXT aus der TXT-Box, um alle TXT-Dateien in einem Verzeichnis zu suchen und ziehen Sie diese Zeile aus der Datei, damit ich die Daten analysieren kann. – TimmRH

+0

Auf einen Blick, das macht der Code bereits. –

Antwort

3

Sie scheinen ganz verloren. Warum verwenden Sie eine dynamic, wenn ein string alles ist, was Sie brauchen? Ihr Code enthält zu viele unnötige Variablen und Konvertierungen. Hier ist ein viel einfacherer Weg, es zu tun. Ich weiß nicht, was Sie das Label haben wollen, wenn es viele passende Zeilen sind, hier bin ich nur dort die erste Platzierung:

string dirScanner = @"\\mypath\"; 

if (string.IsNullOrWhiteSpace(txtSerialSearch.Text) || string.IsNullOrWhiteSpace(txtSID.Text)) 
    return; 

string[] allFiles = Directory.GetFiles(dirScanner, "*.txt"); 

foreach (string file in allFiles) 
{ 
    string[] lines = File.ReadAllLines(file); 
    string firstOccurrence = lines.FirstOrDefault(l => l.Contains(txtSerialSearch.Text)); 
    if (firstOccurrence != null) 
    { 
     lblOutput.Text = firstOccurrence; 
     break; 
    } 
} 
+2

Wenn dies Ihre Frage bearbeitet oder gelöst hat, sollten Sie sie als akzeptierte Antwort markieren (das Häkchen unter den Stimmen), damit Ihre Frage nicht unbeantwortet bleibt. Wie auch immer, ich sehe, du hast noch etwas zu tun, besonders mit diesem SID. – Andrew

+0

Ja Es hat funktioniert, danke, und ja, ich plane, eine Protokolldatei der Eingänge zu erstellen, wollte aber zuerst die Hauptfunktionen arbeiten lassen. Danke noch einmal! – TimmRH

2

ich die gleichen mit Regular Expressions umgesetzt haben. Sie müssen den Namensraum verwenden using System.Text.RegularExpressions;

string strSerial = @"Microsoft"; 
      Regex match = new Regex(strSerial); 
      string matchinglines = string.Empty; 
      List<string> filenames = new List<string>(Directory.GetFiles(textBox1.Text)); 
      foreach(string filename in filenames) 
      { 
       //StreamReader strFile = new StreamReader(filename); 
       string fileContent = File.ReadAllText(filename); 
       if(match.IsMatch(fileContent)) 
       { 
        label1.Text = Regex.Match(fileContent, strSerial).ToString(); 
        break; 
       } 
      } 
+1

Wofür ist der reguläre Ausdruck? Und wo ist es? Ihr Muster ist nur eine literale Zeichenfolge. Eine RegEx bietet keinen Vorteil, wenn Sie nur ein 'Contains' machen. – Andrew

+0

Es ist nur ein anderer Ansatz. Ich stimme dir zu. In diesem Fall bringt regulärer Ausdruck keinen zusätzlichen Wert. In diesem Fall ist Ihre Lösung im Vergleich zu regulären Ausdrücken mehr Leistung. http://stackoverflow.com/questions/2962670/regex-ismatch-vs-string-contains#2962689 –

+1

Vielen Dank, sie beide arbeiteten, es ist schön, verschiedene Ansätze dazu zu lernen. – TimmRH

Verwandte Themen