КАК ВЫБРАТЬ номер строки в TextBox Multiline
У меня есть большой текст в элементе управления System.Windows.Forms.TextBox в моей форме (winforms), против 2008 года.
Я хочу найти текст и выбрать номер строки, где я нашел этот текст.
Образец,
У меня жирный большой текст, и я нахожу "ERROR en línea", и я хочу выбрать номер строки в многострочном текстовом поле.
string textoLogDeFuenteSQL = @ "SQL * Plus: выпуск 10.1.0.4.2 - производство 1 марта, 14:35:43 2010
Copyright (c) 1982, 2005, Oracle. Все права защищены.
******** БОЛЬШЕ ТЕКСТА ************
Conectado a: Oracle Database 10g Enterprise Edition, выпуск 10.2.0.4.0 - 64-битное производство с опциями разделения, анализа данных и тестирования реальных приложений
ГДЕ LAVECODIGO = 'CO_PREANUL' * ОШИБКА en línea 2: ORA-00904: ""LAVECODIGO"": идентификатор не указан?
INSERT INTO COM_CODIGOS * ОШИБКА en línea 1: ORA-00001: ограничение игры (XACO.INX_COM_CODIGOS_PK) виолада ";
******** БОЛЬШЕ ТЕКСТА ************
Любой пример кода об этом? заранее спасибо,
2 ответа
Возможно, вы захотите взглянуть на метод TextBoxBase.GetLineFromCharIndex. Этот метод извлекает номер строки положения символа в текстовом поле.
string str = textBox2.Text;
int index = textBox1.Text.IndexOf(str);
if (index !=-1)
{
int lineNo = textBox1.GetLineFromCharIndex(index);
}
"Этот метод позволяет определить номер строки на основе индекса символа, указанного в параметре index метода. Первая строка текста в элементе управления возвращает нулевое значение. Метод GetLineFromCharIndex возвращает номер физической строки, где индексированный символ является находится в пределах контроля."
РЕДАКТИРОВАТЬ: Это только находит вхождения искомого текста. Чтобы вычислить номера строк, используйте ответ Fredrik Mörk.
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);
}
}