当前位置:编程学习 > VB >>

vb 字符串每隔一定长度,插入 换行符 ,有汉字长度的处理?

一组字符串,字符串长度不确定,要求每隔8个字符串,插入一个换行符,

"1234567890"转换后为
"12345678
90".
另外还要求汉字长度处理,一个汉字按两个字符处理,即
"一二三四五六七八九十"转换后为
"一二三四
五六七八
九十".
特别难的是:字符串中有数字,英文和汉字同时出现,而且数字和英文是单数,如"123456a字bcd".
我处理不了,难死了!谁能帮一下?  --------------------编程问答-------------------- 前两种情况:
Private Sub Form_Load()
Dim s, ss, s1, s2, s3
s1 = "1234567890995316770"
l1 = Int(Len(s1) / 8)
If l1 < 1 Then
MsgBox "长度小于8"
Else
For i = 0 To l1 - 1
s = s & Mid(s1, i * 8 + 1, 8) & vbCrLf
Next
End If
s = s & Right(s1, Len(s1) - l1 * 8)
MsgBox s
s2 = "一二三四五六七八九十"
l2 = Int(Len(s2) / 4)
If l2 < 1 Then
MsgBox "长度小于4"
Else
For i = 0 To l2 - 1
ss = ss & Mid(s2, i * 4 + 1, 4) & vbCrLf
Next
End If
ss = ss & Right(s2, Len(s2) - l2 * 4)
MsgBox ss
End Sub
--------------------编程问答-------------------- 写漏了,我不是问换行符是什么,我知道换行符是 chr(10) --------------------编程问答-------------------- 太厉害了。
有位网友给的。
Private Sub Command1_Click()
Dim a As String, b As String, s As String, n As Long, i As Long
a = "特别11难的是12:字符45串gfg中f有数字,英文和nbnb汉字同时出x1c113s8778787xc现,而且eee数字和英文是ddd单数,如123456a字bcd"
For i = 1 To Len(a)
    b = Mid(a, i, 1)
    If Asc(b) < 0 Then
        If n >= 7 Then
            s = s & vbCrLf
            n = 2
        Else
            n = n + 2
        End If
    Else
        If n = 8 Then
            s = s & vbCrLf
            n = 1
        Else
            n = n + 1
        End If
    End If
    s = s & b
Next
MsgBox s
End Sub  --------------------编程问答-------------------- 字符串中有数字,英文和汉字同时出现 那你就判断啊 数字,英文一个字符 汉字两个字符

从0开始逐一的加 如大于8(7直接跳到9,那就看你该如何处理了)

重点在于你要如何判断每个字符是否为汉字, 这才是你问题之所在

用下面这代码自己改一下吧

'********************************************

'汉字 16进制区间 B0A1-F7FE
'汉字10进制区间 45217--63486
'汉字区位: 16区位01-94 ---- 87区位01-94

Option Explicit
Dim i&, Rtn&, aa$
Private Sub Command1_Click()
   MsgBox IIf(ChkHZ(Text1.Text), "字符串中有汉字", "字符串中没有汉字")
End Sub

Public Function ChkHZ(ChkStr As String) As Boolean
   ChkHZ = False
   For i = 1 To Len(ChkStr)
      Rtn = Str2Dec(Mid(ChkStr, i, 1))
      If Rtn >= 45217 And Rtn <= 63486 Then ChkHZ = True: Exit For
   Next i
End Function

Public Function Str2Dec(TxtStr$) As Long
   aa = Hex(Asc(TxtStr))
   aa = IIf(Len(aa) = 2, "00" & aa, aa)
   Str2Dec = Val("&h" & Left(aa, 2)) * 256 + Val("&h" & Right(aa, 2))
End Function
--------------------编程问答-------------------- 其实难度并不大。

既然是‘中英混合’,象:"123456a字bcd" 这种,是弄成:
123456a字
bcd

还是:
123456a字
bcd

呢?这个规则得由你自己定啊!

还有,是只插入换行符(一个字符),还是插入回车换行符(两个字符)呢?
你得说确切点啊。
--------------------编程问答-------------------- 提供一个思路,代码自己完善

Function GetCharLen(pChar() As Byte) As Long
    GetCharLen = 1 - (pChar(1) <> 0)
End Function


Private Sub Command1_Click()

    Dim myStr As String
    Dim Length As Long
    Dim arrStr() As String
    Dim tmpLen As Long
    Dim tmpBit As Long
    Dim Idx As Long
    Dim i As Long
    
    myStr = "特别11难的是12:字符45串gfg中f有数字,英文和nbnb汉字同时出x1c113s8778787xc现,而且eee数字和英文是ddd单数,如123456a字bcd"
    
    Length = Len(myStr)
    ReDim arrStr(Length * 2)
    
    For i = 1 To Length
        tmpBit = i
        tmpLen = 0
        Do
            tmpLen = tmpLen + GetCharLen(Mid(myStr, i, 1))
            i = i + 1
        Loop Until tmpLen >= 8 Or i > Length
        If tmpLen > 8 Then i = i - 1
        arrStr(Idx) = Mid(myStr, tmpBit, i - tmpBit)
        Idx = Idx + 1
        i = i - 1
    Next i
    ReDim Preserve arrStr(Idx - 1)
    
    Debug.Print Join(arrStr, vbCrLf)
    
End Sub
--------------------编程问答-------------------- 顶下! --------------------编程问答-------------------- 判断不难,将字符串中的每个字符单独分析,使用ascii码直接转换后,所有非95可打印字符的内容都是负值。 --------------------编程问答--------------------

Private Sub Command1_Click()
    Dim a As String, b As String, c As String, i As Integer, j As Integer
    a = "特别难的是:字符串中有数字,英文和汉字同时出现,而且数字和英文是单数,如123456a字bcd."
    
    For i = 1 To Len(a)
        b = Mid(a, i, 1)
        j = IIf(Asc(b) < 0, j + 2, j + 1)
        c = c & b
        If j = 8 Then
           c = c & Chr(10)
           j = 0
        ElseIf j > 8 Then
           c = Left(c, Len(c) - 1) & Chr(10)
           i = i - 1
           j = 0
        End If
    Next
    MsgBox c

--------------------编程问答-------------------- 请注意
?len("啊a"),lenb(strconv("啊a",vbFromUnicode ))
 2             3 

   //GBK汉字内码范围
   //区码   ,位码
   //81-A0 ,40-7E 80-FE
   //AA-AF ,40-7E 80-A0
   //B0-D6 ,40-7E 80-FE
   //D7    ,40-7E 80-F9
   //D8-F7 ,40-7E 80-FE
   //F8-FE ,40-7E 80-A0
--------------------编程问答--------------------
integer proc HZwtail(integer p)
    integer s,i,c

    if p<1
        return(0)
    endif
    s=0
    for i=1 to p
        c=CurrChar(i)
        case s
        when 0
            if c>0x80
                s=1
            else
                s=0
            endif
        when 1
            if c>=0x40
                s=2
            else
                s=0
            endif
        when 2
            if c>0x80
                s=1
            else
                s=0
            endif
        endcase
    endfor
    return(s)
   //GBK汉字内码范围
   //81-A0 ,40-7E 80-FE
   //AA-AF ,40-7E 80-A0
   //B0-D6 ,40-7E 80-FE
   //D7    ,40-7E 80-F9
   //D8-F7 ,40-7E 80-FE
   //F8-FE ,40-7E 80-A0
 //if (((0x81<=q and q<=0xA0) or (0xB0<=q and q<=0xD6) or (0xD8<=q and q<=0xF7)) and ((0x40<=w and w<=0x7E) or (0x80<=w and w<=0xFE)))
 //or (((0xAA<=q and q<=0xAF) or (0xF8<=q and q<=0xFE))                          and ((0x40<=w and w<=0x7E) or (0x80<=w and w<=0xA0)))
 //or (              q==0xD7                                                     and ((0x40<=w and w<=0x7E) or (0x80<=w and w<=0xF9)))
//  if (q>0x80 and w>=0x40)
//      i=i+2
//  else
//      i=i+1
//  endif
end
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,