文字列の分割

解決


ちゃまき  2012-09-27 16:02:57  No: 147816  IP: [192.*.*.*]

VB.NETにて質問なのですが、
半角と全角が混在した長い文字列があります。
この文字列は決まったものではなく、文字列の長さや、内容は毎回異なります。

この文字列を仮にZ1として、これを50バイト単位で分割したいと思っています。(半角1バイト全角2バイトとして計算する)

開始位置が全角の真ん中の場合と、終了位置が全角の真ん中の場合が問題
なのですが、
前者は半角手前まで取得し、後者は半角手前からの取得とすれば文字の抜けがなく分割できるのですが、NETでVB6のMidB関数がなくSubstringでは文字数での取得なので、うまくいきません。
何かよい方法はないでしょうか?

編集 削除
オショウ  2012-09-27 21:50:14  No: 147817  IP: [192.*.*.*]

http://anetm.com/dev/tools/vbdotnet/112230.htm
http://www.atmarkit.co.jp/fdotnet/dotnettips/014strcheck/strcheck.html

それらを使って、切り分けるしかないのでは?

以上。参考まで

編集 削除
shu  2012-09-28 11:07:12  No: 147818  IP: [192.*.*.*]

正規表現を用いた全角、半角の分割です。参考にしてみて下さい。
ただしこれは半角文字以外は全角と判断しています。

Imports System.Text.RegularExpressions

        Dim Han As New Regex("^((?<zen1>.*?)(?<han>[\x20-\x7F]+))*(?<zen2>.*)$", RegexOptions.Compiled)

        Dim m = Han.Match(TextBox1.Text)
        If m.Success Then
            Dim capzen1 = m.Groups("zen1").Captures
            Dim caphan = m.Groups("han").Captures
            Dim grpzen2 = m.Groups("zen2")

            ListBox1.Items.Clear()
            For idx = 0 To capzen1.Count - 1
                ListBox1.Items.Add(capzen1(idx).Value)
                ListBox1.Items.Add(caphan(idx).Value)
            Next
            ListBox1.Items.Add(grpzen2.Value)
        End If

編集 削除
ちゃまき  2012-09-28 11:52:41  No: 147819  IP: [192.*.*.*]

助言ありがとうございます。
イメージはつかめましたので、それぞれのやり方を試してみます。

編集 削除