Domanda

Non ho testo di grandi dimensioni in controllo System.Windows.Forms.TextBox nella mia forma (WinForms), VS 2008.

Voglio trovare un testo e selezionare il numero di riga in cui ho scoperto che il testo.

Esempio

Non ho testo grande grasso, e trovo "ERROR en línea", e voglio selezionare il numero di riga nel testo multilinea.

string textoLogDeFuenteSQL = @"SQL*Plus: Release 10.1.0.4.2 - Production on Mar Jun 1 14:35:43 2010

Copyright (c) 1982, 2005, Oracle. Tutti i diritti riservati.

******** più testo ************

conectado un: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - produzione 64bit Con la divisione, Data Mining e opzioni di Real Application Testing

WHERE LAVECODIGO = 'CO_PREANUL'

ERRORE en línea 2:

ORA-00904: "" LAVECODIGO "":? Identificador no v lido

INSERT INTO COM_CODIGOS

ERRORE en línea 1:

ORA-00001: UNICA restricción (XACO.INX_COM_CODIGOS_PK) violada ";

******** più testo ************

Ogni codice di esempio a questo proposito?

È stato utile?

Soluzione

Si potrebbe desiderare di guardare TextBoxBase .GetLineFromCharIndex metodo. Questo metodo recupera il numero di riga di posizione del carattere nella casella di testo.

string str = textBox2.Text;

            int index = textBox1.Text.IndexOf(str);

            if (index !=-1)
            {                

              int  lineNo = textBox1.GetLineFromCharIndex(index);
            }

"Questo metodo consente di determinare il numero di riga in base all'indice carattere specificato nel parametro index del metodo. La prima riga di testo nel controllo restituisce il valore zero. Metodo Il GetLineFromCharIndex restituisce il numero di riga fisico in cui il carattere indicizzato si trova all'interno del controllo. "

Altri suggerimenti

Modifica Questo trova solo le occorrenze del cercati testo. Per calcolare i numeri di riga utilizzano Fredrik 's risposta.

 using System.Text.RegularExpressions;

 public static void FindErrorInText(string input)
 {
   Regex rgx = new Regex("ERROR en linea \d*", RegexOptions.IgnoreCase);
   MatchCollection matches = rgx.Matches(input);
   if (matches.Count > 0)
   {
     Console.WriteLine("{0} ({1} matches):", input, matches.Count);
     foreach (Match match in matches)
        Console.WriteLine("   " + match.Value);
   }
 }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top