C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: リッチテキスト(RTF)のテキスト検索について


(過去ログ 46 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■24647 / inTopicNo.1)  リッチテキスト(RTF)のテキスト検索について
  
□投稿者/ たこやき (17回)-(2008/09/05(Fri) 19:01:29)

分類:[C#] 

またお願いします。
リッチテキストで保存されているテーブルより、
検索文字を含む行のみを抽出したいのですが、
現在以下のように行っています。

// ※ 一旦リッチテキストボックスに読込んで、検索を行っている。

private void button1_Click(object sender, EventArgs e)
{
RichTextBox rt = new RichTextBox();
var aa =
from p in myDataSet.TBL
select p;

foreach (var a in aa)
{
// テキストボックスにRTFをセット
rt.Rtf = a.RTF収納列.ToString();

// テーブルにフラグを立てる
if (rt.Find("検索語") > -1) a.旗 = true;
else a.旗 = false;
}

// フラグの立っている行のみ抽出
myBindingSource.Filter = "旗=true";
}

やや時間がかかるのですが、これがベストなのでしょうか。
RichTextBoxに読込むとその分時間がかかっているようで、
できれば以下のような形で行いたいのですが……

private void button2_Click(object sender, EventArgs e)
{
var aa =
from p in myDataSet.TBL
where p.RTF収納列.IndexOf("検索語")>-1
select p;
myBindingSource.DataSource = aa.AsDataView();
}

ご指導お願いいたします。


引用返信 編集キー/
■24680 / inTopicNo.2)  Re[1]: リッチテキスト(RTF)のテキスト検索について
□投稿者/ たくボン (13回)-(2008/09/08(Mon) 10:58:07)
2008/09/08(Mon) 12:03:25 編集(投稿者)
2008/09/08(Mon) 12:03:22 編集(投稿者)

No24647 (たこやき さん) に返信
まず、質問の仕方に問題あるかもしれませんねぇ。

> リッチテキストで保存されているテーブルより、
この書き方だとDBと勘違いするかもしれないので。。。
ある程度は予測できますが、テーブルと言う単語を使うと、

@LINQを使用してRTFファイルを読み込んでいる
ADBにRTF形式の文字列を格納している

のどちらか判断しにくいので・・・。

結論から言えば、LINQを使うより普通にRTFファイルを開いて文字列で検索すれば問題ないと思います。
ただし、上記の場合だと検索する単語が書式制御文字列で分割されていないことが条件ですが(分割される恐れがある場合は、書式を削除するなりしてください)

あと、速度が遅くなる可能性のある部分はいくつかあると思います。

> RichTextBox rt = new RichTextBox();
ループの中でnewしてますが、今回の場合は毎回生成する必要はないのでは?

> var aa =
var。これも私は好きではありませんね。
.NET3.0のコンパイラから使用できるみたいですが、個人的には多用すべきではないかと。。。

MSは当初、VBユーザをC#に乗り換えさせてスキルの底上げを狙ってきてたと思うのに、なぜまたこんなぬるま湯を用意するんだろう。生産性は向上するけど、ラムダ式にしても、モジュールにしても、暗黙的なインスタンス生成にしてもプログラマが意識しなければならない部分をどんどん隠してる気がしてならない。
引用返信 編集キー/
■24692 / inTopicNo.3)  Re[2]: リッチテキスト(RTF)のテキスト検索について
□投稿者/ たこやき (18回)-(2008/09/08(Mon) 13:30:49)
たくボンさんご返事ありがとうございます。
ご指摘の通りちょっとわかり難いですね。
行をレコードとしておくべきでした。

> ADBにRTF形式の文字列を格納している
このパターンになります。

> 結論から言えば、LINQを使うより普通にRTFファイルを開いて文字列で検索すれば問題ないと思います。

現在この形をとっているつもりです。
RichTextBoxを一つ作成して、
レコード毎にそのRichTextBoxのRTFにデータをセットして、
RichTextBoxが持つTEXTへの変換機能を利用して、文字列で検索しています。
機能的には問題ないのですが、相当遅い? 300件程度のデータでも
数秒は有にかかります。

まー最悪は、RTF保存列の他にTEXT保存列も作成して、
スピードアップを図ろうと思っているのですが、
独学のド素人ですので、ご助言頂ければと思って。
よろしくお願いします。


引用返信 編集キー/
■24698 / inTopicNo.4)  Re[3]: リッチテキスト(RTF)のテキスト検索について
□投稿者/ たくボン (15回)-(2008/09/08(Mon) 14:16:51)
No24692 (たこやき さん) に返信

>>ADBにRTF形式の文字列を格納している
> このパターンになります。
了解です。


> RichTextBoxが持つTEXTへの変換機能を利用して、文字列で検索しています。

RTF形式は、日本語を使用する場合、SJISからASCIIに変換だったと思うので、検索文字列がRTFの書式文字列に分割されないのであれば、検索文字列の方をRTF形式(SJIS→ASCII)にしてSelectする方法もありだと思います。

> 機能的には問題ないのですが、相当遅い? 300件程度のデータでも
> 数秒は有にかかります。

遅い理由はたくさんあると思いますが、varを使わずに全て型指定しても遅いですか?
myDataSetは厳密に型指定されたDataSetでしょうか?
ADOとかを使用せずにLINQを使用している理由は?
引用返信 編集キー/
■24699 / inTopicNo.5)  Re[4]: リッチテキスト(RTF)のテキスト検索について
□投稿者/ たこやき (19回)-(2008/09/08(Mon) 14:32:16)
たくボンさんありがとうございます。

> RTF形式は、日本語を使用する場合、SJISからASCIIに変換だったと思うので、検索文字列がRTFの書式文字列に分割されないのであれば、検索文字列の方をRTF形式(SJIS→ASCII)にしてSelectする方法もありだと思います。

正直言ってレベルの高そうな話です。(今はちんぷんかんぷん状態??)
けれども、非常におもしろい方法に思います。チャレンジしてみます。

> 遅い理由はたくさんあると思いますが、varを使わずに全て型指定しても遅いですか?

やってみます。

> myDataSetは厳密に型指定されたDataSetでしょうか?

データソースの作成で自動生成されるものですから、わからないです。

> ADOとかを使用せずにLINQを使用している理由は?

myDataSetそのものがADOだと思うのですが……、
LINQの使用に当たっては、ただ記述が簡単だということで…
一先ずvarを型指定して行ってみます。
ありがとうございました。


引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -