2

私はこのコードを持っています:

' Option Explicit
Public Function Clean(Text)
    On Error Resume Next
    ' Dim Chars As ?????????
    Chars = Array("\", "/", ":", "*", "?", """", "<", ">", "|")
    For Each Replaced In Chars
        Text = Replace(Text, Replaced, "")
    Next
    Clean = CStr(Text)
End Function

しかし、Charsが宣言されていないため、使用時にエラーが発生しましたOption Explicitが、配列を暗くするためにどのタイプを使用する必要がありますか(Dim Chars As ???????)?

4

3 に答える 3

6

修正されたバージョン:

Option Explicit

Public Function Clean(ByVal Text As String)
    Dim Chars As Variant
    Dim Replaced As Variant

    Chars = Array("\", "/", ":", "*", "?", """", "<", ">", "|")
    For Each Replaced In Chars
        Text = Replace(Text, Replaced, "")
    Next
    Clean = Text
End Function

一般的にパフォーマンスの高いバージョン:

Option Explicit

Public Function Clean(ByVal Text As String)
    Dim Chars As Variant
    Dim RepIndex As Long

    Chars = Array("\", "/", ":", "*", "?", """", "<", ">", "|")
    For RepIndex = 0 To UBound(Chars)
        Text = Replace$(Text, Chars(RepIndex), "")
    Next
    Clean = Text
End Function

バリアントを理解することは重要であり、「$」タイプの装飾が接尾辞として付けられた文字列タイプのバージョンではなく、文字列関数のバリアントバージョンを使用することを特に意識する必要があります。

ほとんどの場合、パフォーマンスコストのため、可能な場合はバリアントを避けたいと思うでしょう。

このバージョンはおそらくさらに優れたパフォーマンスを発揮します。

Option Explicit

Public Function Clean(ByVal Text As String)
    Const Chars As String = "\/:*?""<>|"
    Dim RepIndex As Long

    For RepIndex = 1 To Len(Chars)
        Text = Replace$(Text, Mid$(Chars, RepIndex, 1), "")
    Next
    Clean = Text
End Function

VB6には「Char」タイプはなく、変数宣言の初期化構文もありません。

于 2012-12-13T13:23:10.623 に答える
2

文字列の配列として暗くすることができます。そうするためにバリアントは必要ありません。

Dim Chars() As String
Chars = Split("\,/,:,*,?,"",<,>,|", ",")
于 2012-12-19T11:15:48.193 に答える
1

配列は他の変数と同じ方法で宣言されます(つまり、キーワード「Dim」、「Private」、「Public」などを使用)。ただし、配列の境界は変数名の後に括弧で囲まれます(固定長の場合)。配列が宣言されている)、または空の括弧のペアが変数名の後に続きます(可変長または動的配列が宣言されている場合)。

 Dim Chars As Variant
 Chars = Array("\", "/", ":", "*", "?", """", "<", ">", "|")

http://www.vb6.us/tutorials/understanding-arrays

于 2012-12-13T13:05:57.473 に答える