3 Stimmen

Ist es möglich, eine Schleife durch den Inhalt eines Textfeldes zu ziehen? Wenn nicht, was ist die beste Strategie, um Zeile für Zeile zu lesen?

Ich entwerfe einen Crawler, der bestimmte Inhalte von einer Webseite holt (entweder durch Stringmanipulation oder Regex).

Ich bin in der Lage, den Inhalt der Webseite als Antwort-Stream (mit der ganzen httpwebrequest Sache) zu erhalten, und dann für Tests/Entwicklungszwecke, schreibe ich den Stream-Inhalt in ein mehrzeiliges Textfeld in meiner ASP.NET-Webseite.

Kann ich den Inhalt des Textfelds in einer Schleife durchlaufen und dann sagen: "Wenn textbox1.text.contains (oder den Text des Textfelds als String-Variable speichern) eine bestimmte Zeichenfolge enthält, wird ein Zähler erhöht". Das Problem mit dem Textfeld ist, dass die Zeichenkette die Formatierung verliert, so dass sie in einer einzigen langen Zeile ohne Zeilenumbruch steht. Kann das geändert werden?

Ich möchte dies tun, anstatt den Inhalt in eine Datei zu schreiben, weil das Schreiben in eine Datei bedeutet, dass ich mich um alle möglichen externen Probleme kümmern muss. Wenn das natürlich die einzige Möglichkeit ist, dann ist es eben so. Wenn ich in eine Datei schreiben muss, was ist dann die beste Strategie, um in einer Schleife durch jede einzelne Zeile zu gehen (ich bin ein wenig überfordert und daher verwirrt, da es viele logische und sprachliche Methoden gibt) und nach einer Bedingung zu suchen? Wenn ich also nach der Zeichenkette "Hallo" im folgenden Text suchen möchte:

Mein Name ist xyz Ich bin xyz Jahre alt Hallo blah blah blah Auf Wiedersehen

Wenn ich "Hallo" erreiche, möchte ich eine Integer-Variable inkrementieren.

Danke,

1voto

Jon Limjap Punkte 92084

Meiner Meinung nach kann man den Inhalt des Textes in Wörter statt in Zeilen aufteilen:

public int CountOccurences(string searchString)
{
    int i;
    var words = txtBox.Text.Split(" ");

    foreach (var s in words)
        if (s.Contains(searchString))
           i++;

    return i;
}

Zeilenumbrüche müssen nicht beibehalten werden, wenn ich Ihre Absicht richtig verstehe.

Beachten Sie auch, dass dies bei der Suche nach mehreren Wörtern nicht funktioniert.

0voto

Søren Pedersen Punkte 103

Ich mache das in einem Projekt so, vielleicht gibt es eine bessere Methode, aber so funktioniert es :)

string template = txtTemplate.Text;
            string[] lines = template.Split(Environment.NewLine.ToCharArray());

0voto

Das ist eine schöne kreative Art und Weise.

Ich erhalte jedoch ein komplexes HTML-Dokument zurück (zu Testzwecken verwende ich die Microsoft-Homepage, damit ich den gesamten HTML-Code erhalte). Muss ich nicht angeben, wo ich die Zeile umbrechen möchte?

Angesichts Ihrer Methode, wenn jede Zeile in einer Auflistung ist (Das ist ein Gedanke, den ich hatte), dann kann ich Schleife durch jedes Mitglied der Sammlung und suchen Sie nach der Bedingung, die ich will.

0voto

Bobby Jack Punkte 15195

Wenn der Inhalt eines Textfelds mit Zeilenumbrüchen zurückgegeben wird, die den Wortumbruch darstellen, hängt das Ergebnis vom Stil ab (z. B. Schriftgröße, Breite des Textfelds usw.) und nicht davon, was der Benutzer tatsächlich eingegeben hat. Je nachdem, was Sie tatsächlich tun wollen, ist dies mit Sicherheit NICHT das, was Sie wollen.

Wenn der Benutzer die Wagenrücklauf-/Eingabetaste drückt, werden die entsprechenden Zeichen in die Zeichenkette aufgenommen.

0voto

JSBձոգչ Punkte 39615

Warum brauchen Sie überhaupt ein Textfeld? Ihr eigentliches Ziel ist es, einen Zähler zu erhöhen, der auf dem Text basiert, den der Crawler findet. Dies können Sie erreichen, indem Sie einfach den Stream selbst untersuchen:

  Stream response = webRequest.GetResponse().GetResponseStream();
  StreamReader reader = new StreamReader(response);
  String line = null;

  while ( line = reader.ReadLine() ) 
  {
    if (line.Contains("hello"))
    {
      // increment your counter
    }
  }

Dies zu erweitern, wenn eine Zeile mehr als eine Instanz der fraglichen Zeichenkette enthält, bleibt dem Leser als Übung überlassen :).

Sie können den Inhalt immer noch in ein Textfeld schreiben, wenn Sie ihn manuell untersuchen wollen, aber der Versuch, die Zeilen des Textfeldes zu iterieren, verschleiert nur das Problem.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X