空白文字の除去

解決


初心者A  2004-07-15 19:16:03  No: 84600  IP: [192.*.*.*]

空白文字の置換についてです。

文字列の前、後ろの空白はTRIMなどで削除できるのですが
文字列中の空白を削除・置換するにはどうすればいいのでしょうか?

△が空白です。

文字列    ABC△△△△△DEF△△GHI

で△(空白)が3個以上あった場合のみ三個の△を1個に置換したいんです。

何か関数があるんでしょうか?

ご教授お願いします。

編集 削除
初心者A  2004-07-15 19:23:13  No: 84601  IP: [192.*.*.*]

空白ですが、動的でいくつあるかはわかりません。
2個の場合はそのままですが、3個の場合も19個の場合も
1個に変換したいです。
よろしくお願いします。

編集 削除
N_F_A_A  2004-07-15 20:42:28  No: 84602  IP: [192.*.*.*]

Replace関数ではダメですか?
3個を1個に置き換えるなら
Replace(文字列,"△△△","△")
とか。

編集 削除
tom  2004-07-15 22:51:58  No: 84603  IP: [192.*.*.*]

適当なサンプルですが・・・。

strWKに空白がある文字列が、
strWK2には空白が消えた文字列が入ります。

if文の所はANDで条件をくっつけても大丈夫です。



    Dim strWK As String
    Dim strWK2 As String
    Dim i As Integer
    
    strWK = "ABC△△DEF△△△GHI"
    strWK2 = ""
    
    '1文字目から最後の文字まで見ていきます。
    For i = 1 To Len(strWK) Step 1
        
        '空白でなければWK2に入れる
        If Mid(strWK, i, 1) <> "△" Then
            strWK2 = strWK2 & Mid(strWK, i, 1)
        Else
            '前回WK2に入ったのが△でなければWK2に入れる。
            If Right(strWK2, 1) <> "△" Then
                strWK2 = strWK2 & Mid(strWK, i, 1)
            End If
        End If
    Next i
    
    Text1.Text = strWK2

編集 削除
もかち  2004-07-15 23:07:48  No: 84604  IP: [192.*.*.*]

サンプルコードです。
---------------------------------------
Dim strArray() As String
Dim intCount   As Integer
a = Split("1△2△△3△△△4△△△△5△△△△△6", "   ")
For intCount = 0 To UBound(strArray)
    strArray(intCount) = Trim(strArray(intCount))
Next
Debug.Print Join(strArray)
出力結果:
"1△2△△3△4△5△6"

編集 削除
もかち  2004-07-15 23:11:09  No: 84605  IP: [192.*.*.*]

ごめんなさい、3行目まちがってます。
誤:a = Split("1△2△△3△△△4△△△△5△△△△△6", "   ")
正:strArray = Split("1△2△△3△△△4△△△△5△△△△△6", "   ")

編集 削除
初心者A  2004-07-16 11:36:02  No: 84606  IP: [192.*.*.*]

N_F_A_Aさま
tomさま
もかちさま

たくさんご教授本当にありがとうございます。

N_F_A_AさまのReplace関数は3個の場合は1個になりますが、
動的でいくつ"△"があるかわからないので、Replace文をたくさんかいてみたりしましたが、
いくつかいても解決しませんでした


tomさまともかちさまのサンプルのコードを実行してみました所、うまく動的に△が3個以上の場合のみ
1個になりました。それぞれサンプルのコードがちがっていたので、とても勉強になりました。

遅い時間に本当にありがとうございました。
またみかけましたらよろしくお願いします。

ありがとうございました。

編集 削除
nanashi  2004-07-16 14:14:03  No: 84607  IP: [192.*.*.*]

> tomさん

複数の空白(1個も2個も3つ以上も)が一つになるだけだと思いますが…。

> もかちさん

6個以上あった時は空白2つ以上になってしまいます。


    Dim sBuff$, sData As String
    Dim lCnt As Long
    
    sBuff = "1 2  3   4    5     6      7        8   "
    
    Do Until (Len(sBuff) = 0)
        If Left$(sBuff, 1) = " " Then
            sData = sData & " "
            lCnt = lCnt + 1
            
            If lCnt > 2 Then
                sData = RTrim$(sData) & " "
            End If
        Else
            sData = sData & Left$(sBuff, 1)
            lCnt = 0
        End If
        
        sBuff = Mid$(sBuff, 2)
    Loop
    
    Debug.Print sData

編集 削除
tom  2004-07-16 19:53:54  No: 84608  IP: [192.*.*.*]

あ゛・・・。
本当だ・・・。
すみません、よく読んでませんでした。

編集 削除