КАК ВЫБРАТЬ номер строки в TextBox Multiline - PullRequest
3 голосов
/ 02 июня 2010

У меня большой текст в элементе управления System.Windows.Forms.TextBox в моей форме (winforms), по сравнению с 2008 годом.

Я хочу найти текст и выбрать номер строки, в которой я нашел этот текст.

Sample

У меня жирный большой текст, и я нахожу "ERROR en línea", и я хочу выбрать номер строки в многострочном текстовом поле.

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

Copyright (c) 1982, 2005, Oracle. Все права защищены.

******** БОЛЬШЕ ТЕКСТА ************

Conectado a: Oracle Database 10g Enterprise Edition, выпуск 10.2.0.4.0 - 64-разрядная версия С параметрами разделения, интеллектуального анализа данных и тестирования реальных приложений

WHERE 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 ]

4 голосов
/ 02 июня 2010

Возможно, вы захотите взглянуть на TextBoxBase.GetLineFromCharIndex метод. Этот метод извлекает номер строки положения символа в текстовом поле.

string str = textBox2.Text;

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

            if (index !=-1)
            {                

              int  lineNo = textBox1.GetLineFromCharIndex(index);
            }

"Этот метод позволяет определить номер строки на основе индекса символа, указанного в параметре index метода. Первая строка текста в элементе управления возвращает нулевое значение. Метод GetLineFromCharIndex возвращает номер физической строки, где Индексированный символ находится внутри элемента управления. "

1 голос
/ 02 июня 2010

РЕДАКТИРОВАТЬ: Это только находит вхождения искомого текста. Для вычисления номеров строк используйте ответ Fredrik .

 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);
   }
 }
...