Come selezionare il numero di riga in TextBox multilinea
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?
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);
}
}