by NoWest » 2006年4月17日(月) 20:54
> もう少し詳しく書いたほうが良かったようです。
> すいません。
> 私がしたいのは、G2TRなどの文字列(2は変数)で
> 初めは変数が1でいいのですが、次に押すと2になる。
> そういうコードを前回にも投稿しました。
> それを一旦保存し、プログラムを閉じる。
> そしてもう一度開く、そのときにそのボタンをまた押すと、
> 今度はG3TRとなるようにしたいのです。
> よくこの変数の値が50まで行くことがあります。
> しかし、それをまたその数からというようにしたいのです。
> 投稿してもらっても一つも役に立っていないようで、本当に申し訳ありません。
何に使うかよく分かりませんがこんなのはどうでしょうか?
コード: 全て選択
Dim buf[255] As Char
'GetWindowText(GetDlgItem(hMainWnd,EditBox1),buf,256)
lstrcpy(buf,"G9TR")
Dim str As String
If buf[2]=>Asc("0") and buf[2]<=Asc("9") Then
Select Case buf[2]-Asc("0")
Case 0,1,2,3,4,5,6,7,8
buf[2]++
Case 9
buf[2]=Asc("0")
buf[1]++
End Select
Else
Select Case buf[1]-Asc("0")
Case 0,1,2,3,4,5,6,7,8
buf[1]++
Case 9
buf[1]=Asc("0")
str=MakeStr(VarPtr(buf[1]))
lstrcpy(VarPtr(buf[2]),StrPtr(str))
buf[1]=Asc("1")
End Select
End If
Print MakeStr(buf)
'SetWindowText(GetDlgItem(hMainWnd,EditBox1),buf)
このプログラムを改造していけばある程度のものは作れるかと思いますが、
そもそも、文字列データと数値データとを別々に保存しておけば簡単だと思います。
人間は文字列データから数字を取り出すことは簡単ですが、コンピュータはそれを最も苦手としています。一般に特定の位置にある一定の長さの数字を取り出すことは簡単ですが、可変長の数値を文字列から切り取ったり、差し替えたりすることはとても面倒なアルゴリズムを必要とする訳です。
ですから、例えば"G1TR"であれば
"G%dTR"
という文字列と
1
という数値で保存しておき、
wsprintf関数なんぞを使って
wsprintf(buf,"G%dTR",1)
のように表示だけすれば簡単ではないでしょうか?
[quote]> もう少し詳しく書いたほうが良かったようです。
> すいません。
> 私がしたいのは、G2TRなどの文字列(2は変数)で
> 初めは変数が1でいいのですが、次に押すと2になる。
> そういうコードを前回にも投稿しました。
> それを一旦保存し、プログラムを閉じる。
> そしてもう一度開く、そのときにそのボタンをまた押すと、
> 今度はG3TRとなるようにしたいのです。
> よくこの変数の値が50まで行くことがあります。
> しかし、それをまたその数からというようにしたいのです。
> 投稿してもらっても一つも役に立っていないようで、本当に申し訳ありません。[/quote]
何に使うかよく分かりませんがこんなのはどうでしょうか?
[code]Dim buf[255] As Char
'GetWindowText(GetDlgItem(hMainWnd,EditBox1),buf,256)
lstrcpy(buf,"G9TR")
Dim str As String
If buf[2]=>Asc("0") and buf[2]<=Asc("9") Then
Select Case buf[2]-Asc("0")
Case 0,1,2,3,4,5,6,7,8
buf[2]++
Case 9
buf[2]=Asc("0")
buf[1]++
End Select
Else
Select Case buf[1]-Asc("0")
Case 0,1,2,3,4,5,6,7,8
buf[1]++
Case 9
buf[1]=Asc("0")
str=MakeStr(VarPtr(buf[1]))
lstrcpy(VarPtr(buf[2]),StrPtr(str))
buf[1]=Asc("1")
End Select
End If
Print MakeStr(buf)
'SetWindowText(GetDlgItem(hMainWnd,EditBox1),buf)[/code]
このプログラムを改造していけばある程度のものは作れるかと思いますが、
そもそも、文字列データと数値データとを別々に保存しておけば簡単だと思います。
人間は文字列データから数字を取り出すことは簡単ですが、コンピュータはそれを最も苦手としています。一般に特定の位置にある一定の長さの数字を取り出すことは簡単ですが、可変長の数値を文字列から切り取ったり、差し替えたりすることはとても面倒なアルゴリズムを必要とする訳です。
ですから、例えば"G1TR"であれば
"G%dTR"
という文字列と
1
という数値で保存しておき、
wsprintf関数なんぞを使って
wsprintf(buf,"G%dTR",1)
のように表示だけすれば簡単ではないでしょうか?