DOBON.NET DOBON.NETプログラミング掲示板過去ログ

文字列を40バイトまででカットしたい

環境/言語:[WindowsXP,VB.NET]
分類:[.NET]

はじめまして
文字列を文字数ではなく、バイト数(40バイト)で区切り、残りはカットしたいです。

バイト数はshift JISコードのバイト数でカウントしたいので、以下のコードでカウントするところまでは調べられたのですが、
「Byte型の 'sptbyte'を40バイトで区切り'Output'へ設定する」処理を見つけることができず困っております。

Dim Output As String
Dim spt As String
Dim sptbyte As Byte()

sptbyte = System.Text.Encoding.GetEncoding(932).GetBytes(spt)

Output = System.Text.Encoding.GetEncoding(932).GetString(sptbyte)

この方法ではなく、別の方法で40バイトで区切ることができれば、それでもよいのですが、初心者なもので、申し訳ないのですがご教示頂ければ幸いです。
Encoding.GetString をよく調べてみて下さい。
Byte() 一つを引数に取る以外のもありますよね?

// 泣き別れは無視して良いのだろーか
> // 泣き別れは無視して良いのだろーか

そんなことは無いと思うけど(^^;

If 元文字列のバイト数が40より大きかったら Then
For 先頭からの文字数 = Math.Max(40, 元文字列の文字数) To 20 Step -1
部分文字列 = 元文字列の先頭から文字数分の文字列
If 部分文字列のバイト数が40 または 39 だったら Then
結果は部分文字列です。
Exit For
End If
Next
Else
結果は元文字列です。
End If
こんなとこですか。
■No18171に返信(まどかさんの記事)

まどかさんアドバイスありがとうございます。
今、やっとできました!

この方法なら、泣き分かれもしないで済みますね。
ほんとうにありがとうございました。

ちなみに、ですが...

> For 先頭からの文字数 = Math.Max(40, 元文字列の文字数) To 20 Step -1
の部分は

Math.Min(40, 元文字列の文字数) To 20 Step -1

として実現できました。

Math.Max とすると、以下のエラーが出ました。
'System.ArgumentOutOfRangeException' のハンドルされていない例外が mscorlib.dll で発生しました。

追加情報 : インデックスおよび長さは文字列内の場所を参照しなければなりません。

ほんとうにありがとうございました。
解決済み!
> ちなみに、ですが...
>> For 先頭からの文字数 = Math.Max(40, 元文字列の文字数) To 20 Step -1
> の部分は
> Math.Min(40, 元文字列の文字数) To 20 Step -1
> として実現できました。

すいません。そのとおりです。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板