喫茶XRAYトップページ
[
▲前のスレッド
]
[3400]
なにか妙案はないでしょうか?
返信
削除
2010/5/31 (月) 22:22:19
たてぐや 〔
HomePage
〕
ここに数万行のテキストファイルがあるとします。その中から何行かを
取り出すことを考えます。取り出す部分にはもちろん「ここから」「ここ
まで」というヘッダ・フッタを入れてあります。現在はこのテキストファ
イルをTstringlitsに読み込んで、indexofでヘッダを見つけ、フッタまで
ループでRichEditに表示させています。職場のQuadコアのマシンだと、
さほど重くはないのですが、別のドン速マシンだとかなりストレスを感じ
るくらい処理にかかります。こういう場合に、何かもっと速く拾い出せる
方法はないでしょうか? お知恵拝借です。
[3401]
Re:なにか妙案はないでしょうか?
返信
削除
2010/5/31 (月) 22:37:48
Mr.XRAY
>なにか妙案はないでしょうか?
ないです.なんて...
> ファイルをTstringlitsに読み込んで、indexofでヘッダを見つけ、
リソースが許されるマシンならTStringListに読み込むのは
たいした問題ではないと,ということにして.
問題は,そのヘッダなりの文字の検索速度だとおもうんです.
infexOfやPos関数で検索すると遅いです.
文字列のポインタを使用するが早いと思いますが...
Unicodeでないなら,以下のコードが使えそうです(いや使えます).
5−1 部分文字列を数える
のコードで,1つだけ検出したら終了するという感じにするとかですね.
http://
mrxray.
on.
coocan.
jp/
Halbow/
VCL05.
html
[3402]
Re2:なにか妙案はないでしょうか?
返信
削除
2010/5/31 (月) 22:59:06
Mr.XRAY
> 5−1 部分文字列を数える
> のコードで,1つだけ検出したら終了するという感じにするとかですね.
>
>
http://
mrxray.
on.
coocan.
jp/
Halbow/
VCL05.
html
これは逐次検索ですが,世の中には検索のアルゴリズムがいろいろ
あります.
おそらく,gawkや小宮さんのDelphi用正規表現ユニット「SkRegExp」
などはこのようなアルゴリズムを利用していると思われます.
逐次検索のコードは簡単ですけどね.
Delphi用正規表現ユニット「SkRegExp」
http://
komish.
com/
softlib/
skregexp
.
htm
[3403]
Re2:なにか妙案はないでしょうか?
返信
削除
2010/5/31 (月) 23:12:10
たてぐや 〔
HomePage
〕
▼ Mr.XRAYさん
> 問題は,そのヘッダなりの文字の検索速度だとおもうんです.
> infexOfやPos関数で検索すると遅いです.
> 文字列のポインタを使用するが早いと思いますが...
早速ありがとうございます。Indexof関数って、瞬時に帰ってくるのだと
思っていましたが、そうではないようですね。文字列ポインタによる検索は
ずっと昔にTurboPASCALのころのやったかもしれません。さっそく取り組んで
みることにします。
※こういうふうに出てくるのがMr.XRAYさんの宝箱の宝箱たるゆえんですね。
[3404]
Re3:なにか妙案はないでしょうか?
返信
削除
2010/5/31 (月) 23:18:00
Mr.XRAY
▼ たてぐやさん.どうもです.
> ※こういうふうに出てくるのがMr.XRAYさんの宝箱の宝箱たるゆえんですね。
前にも誰かが書いていましたが,実は,全てリンクのページか
サンプルプログラム集関係なんです.タネ明かしです.
この際,正規表現を使うまでもないでしょうが,
正規表現を試してみてはいかがでしょう.
ある文字列で囲まれた行だけを取り出すとか,変換するとかも
できます.
サイトのHTMLファイルの編集に使っています.
サイトの一括整備の時にですから,ほんとにたまにですが.
[3408]
Re3:なにか妙案はないでしょうか?
返信
削除
2010/6/2 (水) 05:56:11
Mr.XRAY
▼ たてぐやさん
> 早速ありがとうございます。Indexof関数って、瞬時に帰ってくるのだと
IndexOfはPos関数よりは速いですハズですが...
IndexOfで遅いなら,他のアルゴリズムでもあまり期待できないかな?
それよりも遅いマシンが問題だったりして.
よく巡回している「廃品回収」は結構高いですよ(ん? 何の話?)
[3405]
Re:なにか妙案はないでしょうか?
返信
削除
2010/6/1 (火) 15:18:00
SO
クイックサーチが早いと思います(^-^)
http://
www-
igm.
univ-
mlv.
fr/~
lecroq/
string/
node19.
html
▼ たてぐやさん
> ここに数万行のテキストファイルがあるとします。その中から何行かを
> 取り出すことを考えます。取り出す部分にはもちろん「ここから」「ここ
> まで」というヘッダ・フッタを入れてあります。現在はこのテキストファ
> イルをTstringlitsに読み込んで、indexofでヘッダを見つけ、フッタまで
> ループでRichEditに表示させています。職場のQuadコアのマシンだと、
> さほど重くはないのですが、別のドン速マシンだとかなりストレスを感じ
> るくらい処理にかかります。こういう場合に、何かもっと速く拾い出せる
> 方法はないでしょうか? お知恵拝借です。
[3406]
Re2:なにか妙案はないでしょうか?
返信
削除
2010/6/1 (火) 17:48:23
Mr.XRAY
▼ SOさん
>
http://
www-
igm.
univ-
mlv.
fr/~
lecroq/
string/
node19.
html
あるんですねぇ.
Quick Search(Boyer-Moore algorithm)というんですか.
検索で思い出しましたが,Googleの検索エンジンもすごいですよね.
[3407]
Re2:なにか妙案はないでしょうか?
返信
削除
2010/6/1 (火) 22:37:44
たてぐや 〔
HomePage
〕
▼ SOさん
> クイックサーチが早いと思います(^-^)
ありがとうございます。これは要検討ですね。
昔TurboPASCALで同じようなことをやるのに、文字列リストの先頭からち
終わりから同時に二分探査する方法を使ったことがありますが、この方が
早そうです。
ひさしぶりにC→PASCALのトランスレーションをやらねば… と思いな
がら、2,3日はサーバのメンテナンスでつぶれそうです。
[
▼次のスレッド
]
INCM/CMT
Cyclamen v3.82