- PR -

文字列の比較

1
投稿者投稿内容
yuki
会議室デビュー日: 2003/11/11
投稿数: 6
投稿日時: 2004-01-15 14:12
すみません。.Netの質問ではないのですが、.Netでも同じかもしれないので
質問させてください。
.NetではないASPなのですが、文字列の比較について質問させてください。

現在、文字列のソートプログラムを作っているのですが、
文字列と文字列を比較する場合ってどのようにすればよいのでしょうか?
例えば、消防と警察と二つの文字列があった場合、
警察の文字列を取得したいのですが、取得できない場合があります。
ASPの関数にstrcmpというのがあるのですが、うまく値を取得できません。
ほかにどんな方法がありますか?よろしくお願いします。

ちなみにstrcmpは、
temp = strcmp("消防","警察")

このように記述しましたがうまく取得できませんでした。

よろしくお願いいたします。
米山@クロノス
大ベテラン
会議室デビュー日: 2003/06/10
投稿数: 103
お住まい・勤務地: 大阪市淀川区西中島4-13-22 新大阪淀川ビル5F
投稿日時: 2004-01-15 14:42
こんにちは。米山@クロノスです。

引用:

yukiさんの書き込み (2004-01-15 14:12) より:
ちなみにstrcmpは、
temp = strcmp("消防","警察")

このように記述しましたがうまく取得できませんでした。




「うまく取得できない」とは?
もう少し詳細な説明をしたほうがいいですよ。

最後の引数を省略するとバイナリモードの比較になるとありますが、そのあたりは関係ないですか?
http://tryasp.winscom.co.jp/document/vbscript/199.htm
ゆきお
常連さん
会議室デビュー日: 2003/12/17
投稿数: 22
お住まい・勤務地: 名古屋市
投稿日時: 2004-01-15 15:05
yukiさんこんにちは。

引用:

ちなみにstrcmpは、
temp = strcmp("消防","警察")

このように記述しましたがうまく取得できませんでした。



ちょっと気になったのですが、strcmpは文字列"消防"と"警察"の大小比較を
して以下の帰り値を取得します。

・0(等しい)、
・-1 (文字列1 は 文字列2 より小さい)
・1 (文字列1 は 文字列2 より大きい)

うまく値を取得できないとあったのですが、この値を取得できないということでしょうか?
ちなみにASPではなくVB6.0で上記コードを組んでみたら結果は"1"が表示されました。
このようなことがASPの関数(strcmp)ではできないということでしょうか。
見当違いの返信かもしれませんが、
すいませんどのように取得できないのかがわからないので。

Private Sub Command1_Click()

Dim str警察 As String
Dim str消防 As String
Dim int判定 As Integer

str警察 = "警察"
str消防 = "消防"

int判定 = StrComp(str警察, str消防)
MsgBox (int判定)

End Sub
米山@クロノス
大ベテラン
会議室デビュー日: 2003/06/10
投稿数: 103
お住まい・勤務地: 大阪市淀川区西中島4-13-22 新大阪淀川ビル5F
投稿日時: 2004-01-15 15:20
米山@クロノスです。

そもそも、漢字の大小って比較できないですよね?
読み方はいろいろあるわけですから。。。
それこそ純粋に文字コードの大小比較になってしまうのでは。

yukiさんがどのような結果を求めているかがわからないと答えが出ませんね。

# 文字列のソートなら、やはり読み仮名での処理が必要では?

[ メッセージ編集済み 編集者: 米山@クロノス 編集日時 2004-01-15 15:22 ]
りばぁ
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 130
お住まい・勤務地: 愛知県
投稿日時: 2004-01-15 16:01
こんにちわ。

引用:

米山@クロノスさんの書き込み (2004-01-15 15:20) より:

そもそも、漢字の大小って比較できないですよね?
読み方はいろいろあるわけですから。。。
それこそ純粋に文字コードの大小比較になってしまうのでは。



というか、文字列の大小比較は、すべて文字コードの大小比較になりますね。

ASPは知りませんが、Cの標準関数にもstrcmpってありますが、利用目的は主に、

文字列が一致するかどうかや、数値の文字列・たまにあるのは半角英字文字列の

ソートかとおもいます。(全角英字や、かなのみの文字列もソート可能?)

※半角英字文字列がソートできるのは、文字コード順=アルファベット順なので。

漢字の文字コードは当然、50音順とかになっていないので、strcmpでのソートは

無理かと思います。(文字コード順でのソートが目的であれば問題ないですが^^;

比較する文字列が、任意に入力できるのであれば、ソートは不可能に近いような。。

[ メッセージ編集済み 編集者: りばぁ 編集日時 2004-01-15 16:14 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-01-15 17:25
引用:

りばぁさんの書き込み (2004-01-15 16:01) より:

ASPは知りませんが、Cの標準関数にもstrcmpってありますが、利用目的は主に、

※半角英字文字列がソートできるのは、文字コード順=アルファベット順なので。


 そうだったけ?と思って、MSDNを見ると、最初に「辞書順」と書いてありながら、読み進めていくと「辞書順に比較するためにはstrcollを使え」と書いてありました。う〜ん、どっちだ?

 いや、例えば、文字コードがzyxw...cbaの順になっている実装があったとしたら、どうだったっけ?と思ったのです。
 こう思った理由は、『「islower」を、マクロで「'a' 〜 'z'」で実装しているものがあるけれど、これは間違いである。EBCDICコードでは、途中にゴミがある』みたいなものを読んだことがあったから、なんですけど。


引用:

りばぁさんの書き込み (2004-01-15 17:39) より:

と、一応ちゃんと書いてありますよ?^^;


 わ〜ん、「もしたら」話なんですぅ。そんなツッコミ入れないで^^;

[ メッセージ編集済み 編集者: Jitta 編集日時 2004-01-15 20:13 ]
りばぁ
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 130
お住まい・勤務地: 愛知県
投稿日時: 2004-01-15 17:39
こんにちわ。

引用:

 いや、例えば、文字コードがzyxw...cbaの順になっている実装があったとしたら、どうだったっけ?と思ったのです。



MSDNには、
・・前略
"C" ロケールでは、文字セット (ASCII文字セット) における文字の順序は、辞書式の順序と同じです。しかし、他のロケールでは文字セットにおける文字順が辞書順とは異なる場合があります。
後略・・

と、一応ちゃんと書いてありますよ?^^;

というか、すみません、ぼくの勝手な判断でそういう条件を端折ってしまい、
説明がまったく足りていませんね(汗)

Jittaさんの疑問は、まったくその通りだと思いますが、strcollってどんな
仕組みなんでしょうねぇ・・・。あと、これ使うと漢字も辞書順(って何の辞書!?)
に出来たりするんでしょうか?
未記入
会議室デビュー日: 2005/11/19
投稿数: 5
投稿日時: 2005-11-19 20:33
ASP 文字列 操作 
のキーワードでStrCmpが検索され、この会議室が検索されますので
訂正しておきます。

ASPではStrCmpという関数は標準ではありません。
StrCompなら標準で存在します。
C言語でstrcmpがあるのでそれと混同しているのでしょうか?
いずれにしても、ASPでStrCmpが検索されるのは勘弁して欲しいものです。
1

スキルアップ/キャリアアップ(JOB@IT)