• ベストアンサー

VB.NET LeftBの代用

こんにちわ。 文字列を、バイト数でカットしたいのですが、方法がわかりません。 例えば、 "1あ2い3う4え5お"という文字列があるとすると この文字列の4バイト分の"1あ2"を取り出したい と言ったケースです。 ヘルプを調べたら、 LeftB,MidB,RightBの関数は、VB.NETから、 文字列が、Unicodeの2バイト扱いになるので、 サポートされていないと記述されていました。 LeftB関数と同じような事を、VB.NETでも行いたいです。 どなたか、アドバイスお願致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>文字列が、Unicodeの2バイト扱いになるので、 >サポートされていないと記述されていました。 無かったら、作るしかないですね。 私も最初、はまりました。 Public Shared Function MidB(ByVal value As String, ByVal start As Integer, ByVal length As Integer) As String 'バイト数に応じた部分文字列を取得する Dim encod As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS") Dim bytes As Byte() = encod.GetBytes(value.PadRight(start + length)) Return encod.GetString(bytes, start - 1, length) End Function Public Shared Function LeftB(ByVal value As String, ByVal length As Integer) As String 'バイト数に応じた部分文字列を取得する Dim encod As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS") Dim bytes As Byte() = encod.GetBytes(value.PadRight(length)) Const start As Integer = 0 Return encod.GetString(bytes, start, length) End Function Public Shared Function RightB(ByVal value As String, ByVal length As Integer) As String 'バイト数に応じた部分文字列を取得する Dim encod As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS") Dim bytes As Byte() = encod.GetBytes(value.PadLeft(length)) Dim start As Integer start = UBound(bytes) + 1 - length 'バイト数 Return encod.GetString(bytes, start, length) End Function Public Shared Function LenB(ByVal vstr As String) As Integer If vstr = "" Then Return 0 Else Return System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(vstr) End If End Function

k_kazari
質問者

お礼

ご回答有難うございます。 コードまで有難うございます。 参考にさせていただきます。 有難うございました。

その他の回答 (1)

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.1

System.Text.Encoding.Unicode.GetByteCount("123あ") System.Text.Encoding.Default.GetByteCount("123あ") この二つで違いが分かるので後は適当に工夫してください。

k_kazari
質問者

お礼

アドバイス有難うございました!

関連するQ&A

  • vb2008 MIDB関数

    VB2008を勉強しながら、プログラム開発を行っています。 VB6の時にはMIDB関数が存在したのですが、VB2008では、MIDB関数が無くなっていました。 プログラム作成にあたり、文字列のバイト操作が必要になり、Leftb、RitghB、MIDBを 作成しているのですが、全く分からない状態です。 SHIFT-JISコードに変換してバイト配列よりすればいいと他のサイトに載っていたので それを参考にしていたのですが、全角文字が存在した時に、文字化けをおこしてしまい 正常な文字で表示されないようになってしまいました。 全角文字の半分の1バイトの場所での指定だったので文字化けを起こしている事は 分かったのですが、これを空白にする事は可能なのでしょうか? また、バイト操作を行うサンプル等がありましたら、教えて頂けないでしょうか? 以上

  • VBで全角文字をバイト参照したい

    こんばんは またまた壁にぶちあたっています! VBでテキストから参照した全角文字をMidB関数等で部分参照し、 それぞれ一バイトずつのエリアに設定したいのですが、取得した値を VB(Windows?)が認識出来ない為か「?」となります。 内容を壊さずに取得する方法があれば教えて頂きたいのですがm(__)m サンプル Dim strBuff1 As String * 1 Dim strBuff2 As String * 1 txtInput = "西" strBuff1 = LeftB(StrConv(txtInput,FromUnicode),1) strBuff2 = RightB(StrConv(txtInput,FromUnicode),1) 以上のコーディングで「strBuff1」、「strBuff2」にそれぞれ「?」が 設定されます

  • VB6.0の「vbFromUnicode」はVB.NETではどれに相当しますか?

    VB6.0で、例:StrConv(Text, vbFromUnicode)とかで使用する、 「vbFromUnicode」(文字列を Unicode からシステムの既定のコードページに変換する) は、VB.NETでは使用できないようです。(相当する定数はない?) 「vbFromUnicode」と同等の機能を、VB.NETで使用したいのですが、 どうすれば良いでしょうか?

  • [VBScript][wsh]byte単位でのデータの切り出し

    以前LenBに関して質問した者です。 今回は 「ある文字列の○byte目から△byte分取得する」という処理で困っています。 MidB関数を使うと思うのですが、Unicodeの為、 BASP21の.KconvでSJISに変換してあげています。 HOGEasc = objBasp.Kconv(MidB(tmpLine, ○, △),1) ここで問題となるのが、切り出した文字列が化けてしまうのです。 以下のようにもう一度Unicodeに変換してあげてもダメです。 HOGEuni = objBasp.Kconv(HOGEasc,4) いろいろ試してみましたが、お手上げ状態です。 このような処理はできないのでしょうか? どうぞよろしくお願いいたします。

  • VB6.0とVB.NETの違いについて

    初めて2日目です 会社の研修でVB6.0をやることになり 参考書を片手に悪戦苦闘しています 学生のころにVB.NETをかじったことがあるのですが 割と似ているところがあったりして戸惑っています VB.NETの癖で構文してしまうのでエラーがたくさん出てしまいます そこで皆さんにお聞きしたいのですが VB6.0とVB.NETの違いを教えていただきたいのですが お聞きしたいことは 1)VB.NETとVB6.0の機能や用途についての違い 2)VB.NETとVB6.0で共通で使える関数 3)逆に互換性のない関数(VB6.0では使えないもの) 4)(あれば)同じ記述で違う機能の関数 5)上記とは逆に違う記述で同じような機能を持つ関数 以上のことをお聞きしたいです 質問の内容をもう少し具体的にかければよかったのですが 学習を始めて間もないので抽象的ですいません

  • 半角・全角が混ざった文字列の抽出方法について

    Excel2000での操作です。 A1に『あぃうぇぉABcdef』という文字列が入力されており、この文字列の中から6バイトの文字数とそれ以降の文字数とをA2、A3に分けて表示させる方法がないか調べています。 文字の抽出方法としてMIDBの関数を探し出して先頭から6バイトの文字数をA2に置く事は確認が取れていますが同時にそれ以降の文字数をA3に置くという作業がわからず困っています。 MIDBの関数でなくてもっと簡単な方法がありましたら教えて頂きたいです! よろしくお願いします。

  • Excel 2列をを1列へ

    Excelで2列にデータが入っているものを1列にまとめる方法をご教授いただきたいです。 また、1列にまとめた後に重複するデータをまとめたいです。 添付画像がやりたいことのイメージになります。 ただし、純粋なExcelではなく、Excelをベースにした別のツールをつかっているため、使用できる関数に制限があります。 ネットで検索するとROW()関数を使用するものが多かったのですが、ROW()関数は使用できません。 使用不可能な関数:ROW()、LEFTB()、RIGHTB()、MIDB()・・・ 使用可能な関数:VLOOKUP()、MATCH()、OFFSET()・・・ 作業列を使用する方法でも構いません。 ご回答よろしくお願いいたします。

  • VB6.0でのバイナリデータの扱いについて

    文字コードについて 現在ハンディターミナルとPCとの通信を行うプログラム(VB6.0)を作成しています。      プログラムの一部で下のような記述があります。 ------------------ BCC = Chr(aa) ------------------ 変数aaには数字の226が入り、変数BCCには226に該当する文字列が格納されるはずですが、BCCには文字化けした文字が入り困っています。 調べた結果VB6.0は文字列をunicodeとして扱い、その結果内部的な文字列変換が理由で、文字コード上に存在しない幾つかのバイナリデータは、Chr関数で扱えないというところまではわかりました。 そこでChr命令をChrB命令に変更しましたが、求めている答えが返ってきませんでした。 文字コード表では"DF"までは存在しますが、それ以降の文字は存在しないため扱うのは無理なのでしょうか? StrConvなどを使用すれば可能なのかどうか等考えているのですがわからない状況です。 どなたかご教授願えないでしょうか。宜しくお願い致します。

  • VB6.0のString関数に代わるVB2008のそれは?

    2009年1月27日にVB 2008Expressをダウンロードしたばかりの初学者です。 ですから、色々とわからないことだらけです。 で、今回は VB6.0のString関数に代わるVB2008のそれ。 ? String(12, "*") ************ Function Strings(ByVal C As Char, ByVal L As Integer) As String   Return Space(L).Replace(" ", C) End Function 少しは探しましたが、適当なのがなくてStrings関数を作成してしまいました。 2週間程度の初学者。 しかも、文字列関連のヘルプは昨日に初めて紐解いたばかり。 ですから、「適当なのがない」との判断はかなり怪しいものです。 そこで、「VB6.0のString関数に代わるVB2008のそれは、これですよ!」という回答をお願いします。

  • VB2.0からVB6.0へのアップグレードについて

    VB2.0で作成したアプリをWindowsXP上で動作するようVB6.0にアップグレードすることになりました。 VBXからOCXへの置き換え、文字列処理のUnicode対応、DLL呼出しの修正など問題点は多いようです。 そこで、これまでにこのような作業をした方がいらしたら手順や注意点などを教えてください。 また、これに関して書かれているHPなどあれば教えてください。

専門家に質問してみよう