Caseを使っての文字列変換

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: Caseを使っての文字列変換

by 雷電 » 2006年5月15日(月) 15:00

たくさんの返信ありがとうございます。
、、、こんなにたくさんの人が返信してくれるだなんて、思っても見ませんでした。

いろいろな意見を参考にしてみました、(というより、めんどくさいですが、自分でコードを書いてやっちゃいました)
わざわざCaseでしなくても、Ifででもできたんですね
今回はどうも、ありがとうございました

Re: Caseを使っての文字列変換

by Yoshi » 2006年5月15日(月) 13:24

Dim strBuf[nLength] As Byte
としているばあい

このコード中の
Select Case strBuf

Select Case MakeStr(strBuf)
にして
Case StrPtr(strBuf)="E"

Case "E"

GetDlgItemText(hMission,GetDlgItem(hMission,ComboBox1),StrPtr(strBuf), nLength+1 )

GetDlgItemText(hMission,ComboBox1,strBuf, nLength+1 )
にしてみてはどうでしょうか?


それとも
strBufはString型なのでしょうか?
Dim strBuf As String
ならば、
strBuf = String$(nLength," ")
としておき

Case StrPtr(strBuf)="E"

Case "E"
にして
GetDlgItemText(hMission,GetDlgItem(hMission,ComboBox1),StrPtr(strBuf), nLength+1 )

GetDlgItemText(hMission,ComboBox1,strBuf, nLength+1 )
にしてみましょう。
(これでも可)
GetWindowText(GetDlgItem(hMission,ComboBox1),StrPtr(strBuf), nLength+1 )

by 7 » 2006年5月15日(月) 10:56

自分は文字列をSelect文で比較する時はlstrcmp()関数を使ってます。

コード: 全て選択

Dim str[256] As Byte
Dim str2[256] As Byte

	lstrcpy(str,"aiueo")
	lstrcpy(str2,"aiueo")

	Select Case 0
		Case lstrcmp(str,str2)
			MessageBox(hMainWnd,"2","",MB_OK)
	End Select
でも、Yoshiさんの意見でコーディングスタイル変えようと思いました。

コード: 全て選択

Dim str[256] As Byte
Dim str2[256] As Byte

	lstrcpy(str,"aiueo")
	lstrcpy(str2,"aiueo")

	Select Case MakeStr(str)
		Case MakeStr(str2)
			MessageBox(hMainWnd,"2","",MB_OK)
	End Select

Re: Caseを使っての文字列変換

by Yoshi » 2006年5月15日(月) 10:22

一度String型に入れて比較してはどうでしょうか

by 高信期 » 2006年5月15日(月) 01:41

Ver4でもSelect Case 文でこんな感じで条件に変数を使えますよ。

コード: 全て選択

Dim A = 1 As Long, B = 2 As Long, C = 3 As Long, D As Long
D = 2
Select Case D
  Case A
    Print "D = A"
  Case B
    Print "D = B"
  Case C
    Print "D = C"
  Case Else
    Print "unknown"
End Select
さて、雷電さんのコードは、取得する文字列が2バイト以下であることが保障されていれば、
以下のように書けます。

>イグトランスさん

by 淡幻星 » 2006年5月14日(日) 22:48

イグトランスさん さんが書きました:> おそらくAB 3でできなくなったのに文書は直されずにいたということでしょう。
あ、なるほど。
ありがとうございます。スッキリしました。
そういえばAB 2.59あたりでは

コード: 全て選択

Dim i As Long
i = 10
Dim s(i) As String
なんてのも通りましたっけ。ビバ・曖昧~(笑)。

あと、スレ違いですが、Char型の導入動機の記述、どうもです。

Re: Caseを使っての文字列変換

by イグトランス » 2006年5月14日(日) 22:37

> Caseの条件式は、定数しか指定できないと記憶してるんですが・・・あれ?
> Helpを読むと「任意の変数、または式を指定」ってありますね。
> んなばかな・・・。コンパイルエラーしたはず・・・。

AB 2.62では以下のコードが実行可能でした。もちろんs is Aが出力されます。

コード: 全て選択

Dim s As String
s = "A"

Select Case s
	Case "A"
		Print "s is A"
	Case Else
		Print "s is not A"
End Select
おそらくAB 3でできなくなったのに文書は直されずにいたということでしょう。

by 雷電 » 2006年5月14日(日) 22:19

早速の返信ありがとうございます。
どちらのコードもためさせてもらいましたが、どちらもうまくいきませんでした。
Caseの使い方って、結構難しいものなんですね・・・。
もっと勉強します。。。(ーー;)
ただ、コンボボックスで選択されている英語を、取得して、それを任意の数字に置き換えることを望みとしています。
自分でやってみます。

Re: Caseを使っての文字列変換

by Mario2 » 2006年5月14日(日) 21:14

これで無理なら、"Select Case strBuf" の部分を"Select Case StrPtr(strBuf)"に変えてみるとか。
検証していないので動くかどうかわかりませんが。

Re: Caseを使っての文字列変換

by 淡幻星 » 2006年5月14日(日) 21:11

Caseの条件式は、定数しか指定できないと記憶してるんですが・・・あれ?
Helpを読むと「任意の変数、または式を指定」ってありますね。
んなばかな・・・。コンパイルエラーしたはず・・・。

なお、問題の本質ではないですが、

コード: 全て選択

StrPtr(strBuf)="C+"
という構文は間違っています。
「Byte型ポインタ(DWord型)=String型(もしくはByte型配列)」となり、変数型が不一致です。
この場合は

コード: 全て選択

strBuf="C+"
が正しいです。

たとえば、

Caseの条件式に、変数や式を使えるのであれば、かなり便利なんですけどね~。
・・・もしかして、最新バージョンでは使えるようになったとか?(試してません^^;)

Caseを使っての文字列変換

by 雷電 » 2006年5月14日(日) 20:55

最近本ばかり読んで知識をため込んでいました、雷電です。
最近不思議に思っていたことがあったので、質問します。
コンボボックス内の選択技で、選ぶと、それに適応した数字に変換することはSelect Caseでできると思うのですが、、実際コードを書いてやってみても、できません。
コンパイルしても、できません。
気になったのでスレッドを立ててみました。

自分ではあってると思うのですが、違うじゃないか!と思う人、書き込みをお願いします。

ページトップ