テキストにある文字を半角か全角かを区別して20バイトで区切るには?

解決


S.H  2005-08-19 04:35:14  No: 124233

初めて投稿します。Win2000・VB6の環境です。
まだ、VBに慣れていないので、教えてください。

text1に文章があり、それを20バイトずつ、text2に表示させようとしています。
例えば、
text1:
49458364135459ああいいいううう

text2:
49458364135459ああい
いいううう

となるようにしたいです。
そこで

Dim strA As String
Dim A as Integer

a=1
Do until strA=""
 strA = StrConv(MidB(StrConv(strA, vbFromUnicode), a, 20), vbUnicode)
 text2=strA & vbCrLf 
 a = a + 20
loop

としましたが、20バイト目がもし全角であれば、21バイト目にもまたぐので、
この場合19バイト目で区切り、20バイト目から次の行にさせたいのです。

Dim strA As String
Dim a as Integer
Dim b as Integer

a=1
Do until strA=""
 
 strA = StrConv(MidB(StrConv(strA, vbFromUnicode), a, 20), vbUnicode)

 If LenB(strA, 20, 1) = 1 Then
    strA = StrConv(MidB(StrConv(strA, vbFromUnicode), a, 20), vbUnicode)
    a = a + 20
 Else
    strA = StrConv(MidB(StrConv(strA, vbFromUnicode), a, 19), vbUnicode)
    a = a + 19
 End If

 text2=strA & vbCrLf 
 
loop

とやってみましたが、うまくいきません。
どこが間違っているのでしょうか?

うまく説明できていなければ申し訳ありません。


S.H  2005-08-19 04:43:44  No: 124234

すみません、入力ミスしてました。

text1に文章があり、それを20バイトずつ、text2に表示させようとしています。
例えば、
text1:
49458364135459ああいいいううう

text2:
49458364135459ああい
いいううう

となるようにしたいです。
そこで

Dim strA As String
Dim A as Integer

a=1
Do until strA=""
 strA = StrConv(MidB(StrConv(text1, vbFromUnicode), a, 20), vbUnicode)
 text2=strA & vbCrLf 
 a = a + 20
loop

としましたが、20バイト目がもし全角であれば、21バイト目にもまたぐので、
この場合19バイト目で区切り、20バイト目から次の行にさせたいのです。

Dim strA As String
Dim strB As String
Dim a as Integer
Dim b as Integer

a=1
Do until strA=""
 
 strA = StrConv(MidB(StrConv(text1, vbFromUnicode), a, 20), vbUnicode)
 strB = StrConv(MidB(StrConv(strA, vbFromUnicode), 20, 1), vbUnicode)

 If LenB(strB) = 1 Then
    strA = StrConv(MidB(StrConv(text1, vbFromUnicode), a, 20), vbUnicode)
    a = a + 20
 Else
    strA = StrConv(MidB(StrConv(text1, vbFromUnicode), a, 19), vbUnicode)
    a = a + 19
 End If

 text2=strA & vbCrLf 
 
loop

とやってみましたが、うまくいきません。
どこが間違っているのでしょうか?

うまく説明できていなければ申し訳ありません。


いな  2005-08-19 05:25:03  No: 124235

うまく説明・・・「泣き別れ」でWebを検索してみるべし、

QA掲示板の方かも知れないけれど、過去ログにもあります。
まずは一般的なキーワードで説明できると解決は早くなります。


さくら  2005-08-19 05:25:41  No: 124236

これでどうですか??

Private Sub Command1_Click()
  Dim str As String
  Dim strMid As String
  Dim lng As Long
  Dim sumlng As Long
  Dim i As Integer
  
  For i = 1 To 20
    strMid = Mid$(Text1.Text, i, 1)
    lng = LenB(StrConv(strMid, vbFromUnicode))
    
    If 20 >= (sumlng + lng) Then
      str = str & strMid
      sumlng = sumlng + lng
    Else
      str = str & vbCrLf
      str = str & strMid
      sumlng = 0
    End If
  
  Next i
  
  Text2.Text = str
  
End Sub

Private Sub Form_Load()
  Text1.Text = "49458364135459ああいいいううう"
  Text2.Text = ""
End Sub


さくら  2005-08-19 05:27:25  No: 124237

訂正
Private Sub Command1_Click()
  Dim str As String
  Dim strMid As String
  Dim lng As Long
  Dim sumlng As Long
  Dim i As Integer
  
  For i = 1 To Len(Text1.Text)
    strMid = Mid$(Text1.Text, i, 1)
    lng = LenB(StrConv(strMid, vbFromUnicode))
    
    If 20 >= (sumlng + lng) Then
      str = str & strMid
      sumlng = sumlng + lng
    Else
      str = str & vbCrLf
      str = str & strMid
      sumlng = 0
    End If
  
  Next i
  
  Text2.Text = str
  
End Sub

Private Sub Form_Load()
  Text1.Text = "49458364135459ああいいいううう"
  Text2.Text = ""
End Sub


S.H  2005-08-19 16:23:44  No: 124238

さくらさん、ありがとうございました。
無事、解決することが出来ました。
1文字ずつチェックしていけばよかったのですね。

いなさん、失礼しました。
これからは、もっと調べて、どうしても分からなかったら、
この掲示板で質問します。


いな  2005-08-19 17:31:01  No: 124239

いや、そうゆう意味じゃなかったんだけどなぁ
泣き分かれと言うキーワードさえ伝えておけば
後はサンプルはザクザクなので
煮るなり焼くなりして頂戴みたいな


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

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






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