文字列の計算について


田中  2005-08-15 07:22:52  No: 124128

お世話になります。田中と申します。
また、教えていただきたいことがあり、書き込みました。
VB.NETの勉強をしております。
あるコードがあるんですが、そのコードに100を足した値を求めたいのです。

たとえば、
0001だと100を足して0101
01だと101
といった具合です。
しかし、普通にコードの入った文字列に100を足したら0101などの場合、101となってしまいます。
桁数が決まっていればFormat関数などで0詰めすればよいのですが、決まっていません。
期待通りに値を取得する方法はありますでしょうか?


  2005-08-15 17:07:48  No: 124129

私はまだVB6なので考え方として

1.足す前(0001)の桁数を変数にいれておく。  例  ketasu_1
2.足す方(0101)の桁数を変数にいれておく。  例  ketasu_2
3.計算をする。 kotae , 計算結果の桁数を ketasu_3 にセット。
4.ketasu_1 と ketasu_2 を比較して大きい方を ketasu とする。
5.kotae の桁数が ketasu に満たない時には左側に0を加える。
    加える数は ketasu - ketasu_3


葉月α  2005-08-15 17:49:27  No: 124130

私もVB6ですが

1.桁数を取得
2.もとの値を数値化して100加える
3.format関数とString関数を組み合わせて桁数調整する

format(100足した変数, 1で取得した分の0)って感じの考え方ですが

.Netでも通用するかな?


葉月α  2005-08-15 17:52:56  No: 124131

format(100足した変数, String(1で取得した桁数,"0"))


マグ  2005-08-15 18:37:05  No: 124132

桁数を取得するところをLengthかLenを使ってみてはどうでしょうか?


通ってみた  2005-08-15 22:41:43  No: 124133

自分もVB6.0ですが・・・桁合わせの部分だけ妄想でやってみた

Dim suutiA As String 'ひとつめの数値代入用
Dim suutiB As String 'ふたつめの  〃
Dim sa As Long 'AとBの文字数差保存用
Dim i As Long 'ループ用

If Len(suutiA) > Len(suutiB) Then
    sa = Len(suutiA) - Len(suutiB)
    For i = 1 to sa
        suutiB = suutiB + "0"
    Next
End If

If Len(suutiA) < Len(suutiB) Then
    sa = Len(suutiB) - Len(suutiA)
    For i = 1 to sa
        suutiA = suutiA + "0"
    Next
End If

なんかアホみたいなプログラムだけども


葉月α  2005-08-16 03:47:03  No: 124134

Private mconFixVal As Long = 100 '固定加算値

以下プロシージャの中身

Dim strCode  As String   'コード
Dim lngLenA  As Long     '文字列長1
Dim lngLenB  As Long     '文字列長2
Dim lngDigit As Long     '桁
Dim lngResult As Long     '足した結果
Dim strResult As String   '最終的にほしい文字列

'桁数を取得
lngLenA = Len(strCode)
lngLenB = Len(mconFixVal)

'桁数の大きい方を取得
If lngLenA >= lngLenB Then
      lngDigit = lngLenA
Else
      lngDigit = lngLenB
End If

'コードを数値化して100加える
lngResult = Val(strCode) + mconFixVal

'足した結果を桁数0埋めで結果文字列に設定する
strResult = Format(lngResult, String(lngDigit ,"0"))

.Netにも応用は利くはず・・??


ねろ  2005-08-16 05:33:16  No: 124135

VB.NETで書くと
Dim s1 As String = "0100"
Dim s2 As String = "101"
Dim t As Integer
If s1.Length >= s2.Length Then t = s1.Length Else t = s2.Length
Dim s3 As String = Format(CInt(s1) + CInt(s2), "".PadLeft(t, "0"c))
と書けるのだが、どう見ても良いコードではないな。。。。
ま、参考に。


じゃんぬねっと  URL  2005-08-17 00:19:28  No: 124136

.NET Framework 的には。(お得意なパターンで、空気嫁ない私が登場)

    Dim s1      As String = "0100"
    Dim s2      As String = "101"
    Dim iLength As Integer

    If s1.Length >= s2.Length Then
        iLength = s1.Length
    Else
        iLength = s2.Length
    End If

    Dim iResult As Integer = Int32.Parse(s1) + Int32.Parse(s2)
    Dim sResult As String  = String.Format("{0:D" & iLength.ToString() & "}", iResult)

    MessageBox.Show(sResult)

で、面倒だし、Int32.Parse() をいきなり実行するのは危険なのでメソッド化しましょう。

Public Shared Function GetFixedValueString(ByVal s1 As String, ByVal s2 As String) As String
    '/ TODO : 上の s1. s2 の宣言部を除いたコードを挿入汁
    '/ TODO : Int32.Parse の前に自作の IsNumeric を入れて安全にしとk
End Function


じゃんぬねっと  URL  2005-08-17 00:21:56  No: 124137

皆さんの投稿を見て思ったのは、
  String.Format() メソッドの書式指定をご存知ない方が多そうだな...
ということです。

こっちの記事、複合書式とか色々広げておくようにします。
http://jeanne.wankuma.com/tips/string/12-format.html


ねろ  2005-08-17 01:30:31  No: 124138

>String.Format() メソッドの書式指定をご存知ない方が多そうだな...
他のかたがたはVB6なので私のことでしょうか。
私が使ったのは、String.Format() メソッドではなくVisual Basic のFormat 関数で。。
String.Format() メソッドはここに懇切丁寧な説明があり一応知ってはいるのですが、
http://www.atmarkit.co.jp/fdotnet/dotnettips/116formatint/formatint.html
文字列で埋め込むのが面倒なのでつい簡単に、と言うことで自分でも良いコードでは
無いと書きましたが、作ってしまったので思わず投稿してしまいました。(激しく反省)
じゃんぬねっとさんのコードを参考にされ、私のコードは忘れてください。


じゃんぬねっと  URL  2005-08-17 05:56:34  No: 124139

> 他のかたがたはVB6なので私のことでしょうか。
あ、そうですね... VB6 と謳って投稿してますね...
失礼しました。(*_ _)

> 私が使ったのは、String.Format() メソッドではなくVisual Basic のFormat 関数で。。
あ、こちらに関しては判っておりました。
単に、Format と書いてありますから...
だからこそ、String.Format メソッドって知られていないのかな? と思ったのです。
業務でも、Microsoft.VisualBasic.Format なる記述ばかり目にするもので...

> 文字列で埋め込むのが面倒なのでつい簡単に
PadLeft メソッドで埋め込んだ方が面倒だと思いました...
そういう意味ではないですか?

# それにしても、合わせる桁数が決まってないなんて良いんですかね...
# DB 利用してるならば、テーブル設計とかあるでしょうし...

徹夜明けだったので、失礼な物言いみたいになって申し訳ありませんでした... (*_ _)


ねろ  2005-08-17 06:57:45  No: 124140

>だからこそ、String.Format メソッドって知られていないのかな? と思ったのです。
MSDNでFormatを検索すると真っ先にString.Format が目に飛び込んでくるので。。

>PadLeft メソッドで埋め込んだ方が面倒だと思いました...
投稿の流れで、前の葉月αさんのコードを何も考えずに直しただけで。

># それにしても、合わせる桁数が決まってないなんて良いんですかね...
仕様なんでしょう。(^^;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加