|
出来るのだASP Q&A掲示板(過去LOG)
訪問数 52046
昨日 889
今日 776 【PR】 パソコン入門からIT専門書まで幅広く取り揃えています。セブン-イレブン受取り手数料無料のセブンアンドワイ。 |
Topに戻る
掲示板に戻る
検索
削除
管理者
|
![]()
文字列の中の特定の文字の個数を取りたいのですが・・
いしたくさん
[2002/02/14 15:15:40]
[1646]
|
Re:正規表現は遅いかな?
シナプスさん
[2002/02/18 3:02:11]
[1676]
Re:文字列の中の特定の文字の個数を取りたいのですが・・
北岳さん
[2002/02/14 15:47:46]
[1647]
Re:文字列の中の特定の文字の個数を取りたいのですが・・
いしたくさん
[2002/02/14 15:54:32]
[1648]
for i=0 to n と for each、どっちが速い?
北岳さん
[2002/02/14 16:56:38]
[1651]
Re:for i=0 to n と for each、どっちが速い?
いしたくさん
[2002/02/14 17:41:20]
[1652]
Re:for i=0 to n と for each、どっちが速い?
なかさん
[2002/02/14 18:16:54]
[1653]
Re:for i=0 to n と for each、どっちが速い?
いしたくさん
[2002/02/14 18:23:28]
[1654]
ASCとCHRで
北岳さん
[2002/02/14 18:54:54]
[1655]
Re:ASCとCHRで
なかさん
[2002/02/14 19:52:19]
[1657]
Re:ASCとCHRで
いしたくさん
[2002/02/14 20:54:54]
[1658]
Re:ASCとCHRで
北岳さん
[2002/02/14 22:54:31]
[1659]
Re:ASCとCHRで
なかさん
[2002/02/15 10:13:10]
[1660]
|
| [1646] 文字列の中の特定の文字の個数を取りたいのですが・・ |
| 投稿者:いしたくさん 2002/02/14 15:15:40 |
| 初心者なのでおかしいところは許してやってください。 このような文字列が変数に格納されています。 strAll = "a,b,b,c,a,d,e,a,f,a,b,c" このここからたとえば"a"の数を取得するにはどうすればいいでしょうか。 前から順に探して位置を求めてmid関数で取ってというような処理をしなければいけませんか? 数百回繰り返す作業なのでできるだけシンプルに書きたいのです。 是非ご教授ください。 |
| [1676] Re:正規表現は遅いかな? |
| 投稿者:シナプスさん 2002/02/18 3:02:11 |
| Option Explicit Dim strAll Dim strSearch Dim lCount strAll="a,b,b,c,a,d,e,a,f,a,b,c" strSearch="a" lCount=DataCount(strAll,strSearch) Msgbox (lCount) Function DataCount(strAll,strSearch) Dim RegEX Dim Matchs Dim lngCount Set regEX=New RegExp regEX.Pattern=strSearch regEX.Global = True Set Matchs=regEX.Execute(strAll) lngCount=Matchs.Count Set Matchs=Nothing Set RegEX=Nothing DataCount=lngCount End Function |
| [1647] Re:文字列の中の特定の文字の個数を取りたいのですが・・ |
| 投稿者:北岳さん 2002/02/14 15:47:46 |
| 特定文字区切りならsplit関数で配列に変えるのが速いと思います。 <1.ASP> <% dim ary strAll = "a,b,b,c,a,d,e,a,f,a,b,c" ary=split(strAll,",") response.write "<br>配列下限番号=" & lbound(ary) response.write "<br>配列上限番号=" & ubound(ary) for i=lbound(ary) to ubound(ary) response.write "<br>" & i & "=" & ary(i) if ary(i)="a" then cnta=cnta+1 if ary(i)="b" then cntb=cntb+1 next response.write "<hr>" response.write "a の数=" & cnta & "<br>b の数=" & cntb %> <実行結果> 配列下限番号=0 配列上限番号=11 0=a 1=b 2=b 3=c 4=a 5=d 6=e 7=a 8=f 9=a 10=b 11=c ----------- a の数=4 b の数=3 ちなみに for i=0 to n 〜 next 形式の方が for each x in ary 〜 next 形式よりも速いとか。(どこかで読みましたが、どこだかは失念。) |
| [1648] Re:文字列の中の特定の文字の個数を取りたいのですが・・ |
| 投稿者:いしたくさん 2002/02/14 15:54:32 |
| なるほど。 わざわざソースまで・・・(涙) 本当にありがとうございます。 じっくりソース読んで勉強させていただきます。 ありがとうございました。 |
| [1651] for i=0 to n と for each、どっちが速い? |
| 投稿者:北岳さん 2002/02/14 16:56:38 |
| > ちなみに > for i=0 to n 〜 next > 形式の方が > for each x in ary 〜 next > 形式よりも速いとか。(どこかで読みましたが、どこだかは失念。) 今まで逆の感じを受けていたので、念のため確認実験をしてみましょう。 <% dim ary() n=10000000 '---for i=1 to n形式 redim ary(n) for i=1 to n ary(i)=i next tim1=time() for i=1 to n dummy=ary(i)*ary(i) next tim2=time() erase ary T1=DateDiff("s",tim1,tim2) response.write "<br>T1(秒)=" & T1 '---for each x 形式 redim ary(n) for i=1 to n ary(i)=i next tim3=time() for each x in ary dummy=x*x next tim4=time() T2=DateDiff("s",tim3,tim4) response.write "<br>T2(秒)=" & T2 %> WIN2000、Pentium3、IIS5、ASP(VBScript 5.5)実行結果 T1(秒)=26 T2(秒)=20 2つのブロックを入れ替えても時間は変わらず。 あれ?どこかで読んだのと結果が逆じゃんか? 嘘が書いてあったか、読み間違いだったかしらね。 【結論】for i=1 to n よりも for each x 形式の方が速いです。 |
| [1652] Re:for i=0 to n と for each、どっちが速い? |
| 投稿者:いしたくさん 2002/02/14 17:41:20 |
| なるほど。 僕も試して見ます。 やはり速いほうを使いたいですものね。 ---------------------------------------- 北岳さん。 いろいろ教えていただいて非常に感謝しています。 早速私のソースに組み込んで上手く動かすことが 出来ました。 で、さらに行き詰まっちゃったのですが、先ほど 教えていただいたサンプルソースのばあい、仮に A,Bというものを数えていますよね。 でもはじめからAがあるのかBがあるのか何があるのか わからないんですよ。 半角英字ということしかわかっていなくてですね。 この「strAll」の中にある要素に対してそれぞれの個数 を知りたいのです。 たとえば strAll='A,B,A,C' であればA=2 B=1 C=1 strAll='A,P,G,P' であればA=1 P=2 G=1 です。前から順番にとって別の変数に入れてループして その中でRedimしてともしあったら・・とか色々考えながら やってるんですがパニックです。 訳がわかんなくなってしまいました。 是非今一度ヒントをいただければ幸いです。 |
| [1653] Re:for i=0 to n と for each、どっちが速い? |
| 投稿者:なかさん 2002/02/14 18:16:54 |
| > 半角英字ということしかわかっていなくてですね。 で、1文字単位ということであれば、力業で(^^; for each x in arr select case (x) case "a" cnt_a = cnt_a + 1 以下、zまで というやり方もありかと(^^; 配列で出来るかわかりませんが、 for each x in arr Session(x) = Session(x) +1 next で、全Session情報から、カウントをとるというてもありますね。 Cookieでも同じです あくまでも、考え方としてみてください(^^; # 思いつきで書いていますので |
| [1654] Re:for i=0 to n と for each、どっちが速い? |
| 投稿者:いしたくさん 2002/02/14 18:23:28 |
| なかさん。ありがとうございます。 >> for each x in arr > select case (x) > case "a" > cnt_a = cnt_a + 1 > 以下、zまで なるほど...そうですねえ。 若干不安かも・・ 将来仕様変更でAAがありになったりしたら怖いですね。 > > for each x in arr > Session(x) = Session(x) +1 > next なるほどーーー。こういう手もあるかー。 なるほどーーー。感心します。 > あくまでも、考え方としてみてください(^^; > # 思いつきで書いていますので 参考になりました。ありがとうございます。 |
| [1655] ASCとCHRで |
| 投稿者:北岳さん 2002/02/14 18:54:54 |
| おや、既にレスがついているようですが、折角なので載せときます。 ヒントを文章でややこしく書くよりも、簡単な場合はソースを書いて、説明抜きで載せるほうが楽ちんです。 以下を参考にして下さい。 1.aspの form 中から、自分自身(1.asp)を呼び出しています。 -------------1.asp-------------- <% dim ary dim su(255) z=Request.form("moji") s=Request.Form("kugiri") if z<>"" then ary=Split(z,s) for each x in ary i=asc(x) su(i)=su(i)+1 next end if %> <html><body bgcolor="#ffffee"> <form action="1.asp" method="post"> <p>文字を入力して下さい。 <input type="text" name="moji" value="<%= Request.form("moji") %>" size=50> <p>区切り記号を入力して下さい。 <p>2文字以上で区切ると、最初の1文字のみ数えます。 <input type="text" name="kugiri" value="," size=6> <input type="submit" value="送る"> </form> <table border=1> <tr><td>文字</td><td>数</td></tr> <% for i=0 to 255 if su(i)>0 then %><tr><td><%= chr(i) %></td><td><%= su(i) %></td></tr> <% end if next %> </table> </body></html> |
| [1657] Re:ASCとCHRで |
| 投稿者:なかさん 2002/02/14 19:52:19 |
| # 別に喧嘩打ってるわけではないので、誤解無く(^^ > ヒントを文章でややこしく書くよりも、簡単な場合はソースを書いて、説明抜きで載せるほうが楽ちんです。 嫌みに聞こえるのは、私だけ?(^^ゞ ソース書いているほどの、時間が無かったので、 思いつきで書いてみました。 確かに、混乱させる元になりますね 以後気を付けますm(__)m |
| [1658] Re:ASCとCHRで |
| 投稿者:いしたくさん 2002/02/14 20:54:54 |
| 北岳さん、なかさん 私的にはどちらもすごく参考になりました。 ありがとうございました。 |
| [1659] Re:ASCとCHRで |
| 投稿者:北岳さん 2002/02/14 22:54:31 |
| >>おや、既にレスがついているようですが、折角なので載せときます。 の次の数行は、なかさんのレスとは無関係です。 いしたくさんの(いつもはどなたの質問かなど、いちいち気に留めないのですが) >わざわざソースまで・・・(涙) >本当にありがとうございます即座に、 と、 >是非今一度ヒントをいただければ幸いです。 に対して書いたもので、投稿の際に冒頭に1行継ぎ足しました。 ------------- フリートークに私の「回答を書く際の想定読者」を載せました。 |
| [1660] Re:ASCとCHRで |
| 投稿者:なかさん 2002/02/15 10:13:10 |
| 了解です、私の勘違いですね(^^ゞ フリートークの方を読んで、レス付けておきました。 |
|
TreeBBS For ASP V.0.1.3 |