跳到主要內容

用VB 實現WordWrap的功能

因為負責的項目的某項需求, 因此寫了一個陽春的WordWrap函式.

這函式依照使用者的需求 (一行多少個字) 然後自動將文字裁減, 可說是Mid() 的進階函式.

比如, 我有一組文字, "This is testing only", 我想要一行顯示17個字元, 然而17個字 = This is
testing o, 這很難看, 因此使用這函式將自動拿掉不合理的組合, 變成 "This is testing" -- line 1.

這函式是return Array 的方式, 因此如此使用的話...

Dim a as integer, i as integer
Dim b as Variant

b = WordWrap("This is testing only",17)
a = ubound(b)

For i=0 to a
    Msgbox b(i)
Next i

顯示結果:
This is testing
only

這函式還不夠完善, 因為return 出來的Array數是所要顯示的一行的字數.  懶得修改, 因此只把雛型放出來.

Function WordWrap(Text As String, WordsLimit As Integer, Optional WrapBy As String)
'Create by Gordon Lim (gordon@perridot.com) 2008-07-04
'Text = Input String
'WordsLimit = How many characters want to display per line
'WrapBy = Auto wrap by what string

    Dim length As Integer, i As Integer, x As Integer, roundLoop As Integer, stopAtLoop As Integer
    Dim newWrapBy As String
    Dim s_str As Variant, newArrStr As Variant
   
    If (WrapBy = "") Then
        WrapBy = " "
    End If
   
    length = Len(Text)
    s_str = Split(Text, WrapBy)
    newWrapBy = WrapBy
   
    If (length > WordsLimit) Then       
        ReDim newArrStr(UBound(s_str))
        stopAtLoop = 0
        'For x = 1 To roundLoop
        For x = 1 To WordsLimit
            For i = stopAtLoop To UBound(s_str)
                If i = UBound(s_str) Then
                    newWrapBy = ""
                Else
                    newWrapBy = WrapBy
                End If
               
                If (Len(newArrStr(x - 1) & s_str(i) & WrapBy) <= WordsLimit) Then
                    newArrStr(x - 1) = newArrStr(x - 1) & s_str(i) & WrapBy
                Else
                    Exit For
                End If
               
            Next i
           
            If (i = x) Then
                Exit For
            Else
                stopAtLoop = i
            End If
        Next x
       
    Else
        ReDim newArrStr(1)
        For i = 0 To UBound(s_str)
            If i = UBound(s_str) Then
                newWrapBy = ""
            Else
                newWrapBy = WrapBy
            End If
           
            If (Len(newArrStr(0) & s_str(i) & WrapBy) <= WordsLimit) Then
                newArrStr(0) = newArrStr(0) & s_str(i) & WrapBy
            End If
        Next i
       
    End If
   
    WordWrap = newArrStr
End Function

留言

這個網誌中的熱門文章

解決Apache 2.2, 關於HTTPS 之下使用PROXY 面對的 proxy server received an invalid response from an upstream server 以及 proxy: pass request body failed 的問題

修改以下 (proxy 以及 從proxy 接收的server): httpd.conf: ----------- 在 Include conf.d/*.conf 的前面加入以下: LimitRequestBody 2147483647  #2Gb Timeout 24000 ProxyTimeout 24000 ProxyBadHeader Ignore ssl.conf ---------- 在各個virtualhost 裡加入以下:     SSLEngine on     SSLProxyEngine on     SSLProxyVerify none     SSLProxyCheckPeerCN off     #SSLProxyCheckPeerName off     SSLProxyProtocol +SSLv3 +TLSv1 +TLSv1.1 +TLSv1.2 以下這個只在proxy server 裡的virtualhost 設定     ProxyPass / https://REMOTE_HOST:443/ retry=1 acquire=3000 timeout=3600 Keepalive=On 

解決CentOS 8 的 failed to set locale defaulting to c.utf-8 的問題

這原因是沒有安裝好支援的語言與字型, 特別是UTF8 並沒有被安裝到 因此使用以下指令確認 localedef -i en_US -f UTF-8 en_US.UTF-8 假如出現 "[error] character map file `UTF-8' not found: No such file or directory" 或者 [error] default character map file 'ANSI_X3.4-1968' not found : No such file or directory 那就安裝UTF8 吧 yum whatprovides "*/UTF-8.gz" 如果找到的話 "UTF-8.gz" 的話 yum install "*/UTF-8.gz" -y 再執行一次: localedef -i en_US -f UTF-8 en_US.UTF-8