TextBox Multilineで行番号を選択する方法
質問
System.Windows.Forms.TextBoxコントロール(WinForms)、VS 2008に大きなテキストがあります。
テキストを見つけて、そのテキストが見つかった行番号を選択します。
サンプル、
私は太った大きなテキストを持っています、そして、私は「エラー・エン・リネア」を見つけます、そして、私はテキストボックスマルチラインで行番号を選択したいです。
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'
エラーenlínea2:
ORA-00904: "" lavecodigo "":識別装置no v?lido
INSERT INTO COM_CODIGOS
エラーenlínea1:
Ora-00001:Restricciónúnica(xaco.inx_com_codigos_pk)violada ";
********もっとテキスト************
それに関するサンプルコードはありますか?
解決
あなたは見たいかもしれません textboxbase.getLineFromCharIndex 方法。このメソッドは、テキストボックス内の文字位置の行数を取得します。
string str = textBox2.Text;
int index = textBox1.Text.IndexOf(str);
if (index !=-1)
{
int lineNo = textBox1.GetLineFromCharIndex(index);
}
「このメソッドを使用すると、メソッドのインデックスパラメーターで指定された文字インデックスに基づいて行番号を決定できます。コントロールのテキストの最初の行は値ゼロを返します。GetLineFromCharIndexメソッドは、インデックス付き文字がある物理行番号を返します。コントロール内にあります。」
他のヒント
編集: これは、検索されたテキストの発生のみを見つけます。使用数を計算するには フレドリックの答え。
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);
}
}