初歩的な質問で失礼致します。
タイトルの通りなのですが、text1とtext2に同じ文字列が入っていることを認識させるにはどうしたら良いでしょうか?
具体的にいうと、IF条件に使いたいのです。text1とtext2に同じ文字列が入っているときに、○○する、という風にしたいのですが・・・・。
単純に
IF text1 = text2 Then
〜〜〜
〜〜〜
〜〜〜
End if
というように打ってみたのですが、うまく行きません(中身が一致しても、一致しないときの処理が実行されます)
物凄く初歩的な質問かもしれませんが、どなたかご指導頂けると嬉しいです。
タイトルにはVBのバージョンがかかれて居ないので
解らないですが、VB6などでは、文字列比較関数を使います。
また、それ以前の話で初歩的ですが、
.Textなどのプロパティ名を省略した記述は避けた方が良いです。
まずはこちらを変更してからお試しください。
■文字列比較
int strcmp(a, b)
| | |_ 文字列ポインタ
| |_ 文字列ポインタ
|_ > 0 → a > b
== 0 → a == b
< 0 → a < b
横からの発言は反則かもしれませんが...
>ささ様
質問者が書いた「IF text1 = text2 Then」は不適切ということでしょうか?
というのは、strcmp関数は使ったことがなかったので。
それと「.Textなどのプロパティ名を省略した〜」は私も賛成ですが、
そのようにされている理由などがありましたら教えていただけると
ありがたいです。
横からすみません。>杏りゅう 様
えっと、textの場合は問題ないかもしれませんが、
例えば、OO40など、Oracle Clientのバージョン(8.1.6 と 9.2.0)によっては、〜.value とプロパティ名を明示したときと、
省略した場合では、差しているプロパティが異なります。
つまり、省略して書いてありますが、
何プロパティを比較しているか実際にデバッグウィンドウなどを見て
確認してますか?想定外の値(別の値)が入っていませんか?
ということをまずは確認しましょう。ということです。
>strcmp関数は使ったことがなかったので。
連続投稿すいません、
そこまで大げさな使い方ではないですよ?
例えば同じであることを比較したいならば
if strcmp(text1.text,text2.text) = 0 Then
'同じ
Else
'違う
End if
という使い方でOKです。
>ささ様
ありがとうございました。
>杏りゅう様
勝手にスレを利用させていただき、申し訳ありませんでした。
コントロールやクラスにはデフォルトプロパティという物が
有り、記述する時省略出来ます。
text1がTextBoxの場合デフォルトプロパティはTextです。
つまりtext1はtext1.Textと等価です。
又VBの「=」は比較演算子と言って、If A = B とした時、
A と B が等しければTrueを等しくなければFalseを返します。
従って、
>IF text1 = text2 Then
> 〜〜〜
> 〜〜〜
> 〜〜〜
>End if
は書き方の作法は別として構文的には非の打ち所が有りません。
>IF text1 = text2 Then
が期待どうりの結果を返さないのは、目に見えない空白が有るからでしょう。
前後の空白を取り去る、Trimを入れて、
IF Trim(text1) = Trim(text2) Then
としてみましょう。
>それと「.Textなどのプロパティ名を省略した〜」は私も賛成ですが、・・・
フォームにボタンと、テキストボックスを置き、テキストボックスのオブジェクト名を「Text」にします。
Private Sub Command1_Click()
Text = "a"
End Sub
とします、ボタンを押すとTextBoxに「a」が表示されます。
次に
Private Sub Command1_Click()
Dim Text As String
Text = "a"
End Sub
とすると今度はテキストボックスに「a」は表示されずに変数Textに「a」が代入されます、
TextがTextのデフォルトプロパティを指すのか、Text変数を指すのか紛らわしいのですね。
と言う私も、Text = "a" を多用しています、テキストボックスを配列にしたときなど、
Text(2) = "a" 等とした方が見やすい気がするのと、構文が短くて済むからです。
ただ、余計な空白が入っているかも〜。
っとデバッグすることができない程の初心者に対しては
みやすいから省略しているのではなく、
そうゆうデフォルトのプロパティ云々を知らない可能性が高い。
質問者の『杏りゅう』さんは、どこにもtext1とtext2が
TextBox.Textで有るとは書いて無かったりして・・・
最初の質問が言葉足らずで済みませんでした。
バージョンいうか、アクセスにに入っているビジュアルベーシックを使っています。プログラミングを組むこと自体、相当久しぶりのことなので、ものすごく基本的なことも忘れていたようです。
プロパティ名や空白についてなど、皆さんの意見を参考にして頑張ってみます!有難うございました。
それと、月曜日以降にならないと作業ができないのですが。その場合は解決のチェックを入れないでおいて、解決できたときに改めて書き込んだほうが良いのでしょうか?
>解決できたときに改めて書き込んだほうが良いのでしょうか?
音沙汰がないまま2週間3週間放置されるのはきついのだけれど
取りあえず、2〜3日、土日などは
環境がなくて試せないことがあるっと言うのは
仕方がないのでは?
解決できたときに書き込むのもそうだけど、
試して分からなかったらそのときも
何でハマっているのか状況がつかめないので書き込んで欲しいです。
そうしないといつまでたっても解決しないしね
>ささ様
分かりました。一応土日明けに試してみます。
試してみて、ダメだったらなるべく詳しく状況を書き込んでみます。
もちろん解決できたらチェックを入れて書き込みますね。
皆さんの意見を参考にしてみましたが、解決できませんでした。
>ささ様
if strcmp(text1.text,text2.text) = 0 Then
というのを試してみましたが、使ったことが無いためかうまく行きませんでした。すみません。
>我龍院様
私も、空白部分が問題かと思ってTrimを使ってみましたが、やはりうまく行きませんでした。
プロパティについては、こちらの掲示板に書き込む時に書き忘れていただけでした。お騒がせして本当にすみませんでした(汗
ん〜、あと考えられるのは、
どちらかNullになっていませんか?
Null = Null は常にFalseです。
ブレイクポイントを、
if strcmp(text1.text,text2.text) = 0 Then
に設定し、デバッグウィンドウ、ウォッチ式の結果など
確認されてはいかがでしょうか?
また、Trimは前後半角のスペース(Space(1))を取り除くものですが
全角のスペースの差異はありますか?この辺りもハマリポイントです。
よろしくお願いします。
strcmp関数ではなくstrcomp関数では?
VB6.0ではそうなっています。
ちなみにstrcmp関数はC++の関数です。
あ...間違えたorz
今、VC++やってるから、つい
※でも、なぜコンパイルエラーにならず、試せたのだろう・・・。(謎
ツイート | ![]() |