-1

申し訳ありませんが、私はプログラミングが初めてで、これについて私を助けてくれる親切な人が必要です...

以下に情報のリストがあります。vb スクリプトを使用して、IP アドレス番号の文字列だけを取得する方法を教えてください。

MAC アドレス IP アドレス名 インターフェイス フラグ

00:87:90:65:67:98 192.165.32.23 192.165.32.23 vlan.10 なし

4

3 に答える 3

0

まず、出力の性質を知りたいと思うかもしれません。IP アドレスの文字列を検証する方法を知る必要があります。

IP アドレスの要素は、再度テストする必要がある条件になります。

  1. 4セグメント
  2. ドット区切りで区切る
  3. 下限 => 0 から上限 <= 255 までの各セグメントの番号範囲

それが基本です。しかし、実際には、以下がIP アドレスの検証に使用されます:-

The first number cannot be 10.
If the first number is 172, the second number cannot be between 16 and 31 (inclusive).
If the first number is 192, the second number cannot be 168.
None of the numbers can be greater than 255.

私のサンプル コードでは、厳密な IP 検証の引数に従うのではなく、基本に従います。

VBA を使用している場合でも、Splitメソッドを使用できます。ここでスプリットのドキュメントを確認してください。 を使用する場合Split、使用できる区切り文字があります。[az] から [0-9] から特殊文字 [,;'@] まで何でもかまいません...

オプション明示

Sub validateIP()

Dim strTrash As String
Dim varDelimited As Variant
Dim varDotDelimited As Variant
Dim i As Integer, j As Integer, trueCounter As Integer

'--in your case in between each of the IP address and other combinations, has a white space
strTrash = "00:87:90:65:67:98 192.165.32.23 192.165.32.23 vlan.10 none"

'--first delimit by white space using Split
varDelimited = Split(strTrash, " ")

'-- loop through variant array
For i = LBound(varDelimited) To UBound(varDelimited)
    '--validate if delimited strings are starting and ending with a number and if string contains a dot
    If IsNumeric(Left(varDelimited(i), 1)) And IsNumeric(Right(varDelimited(i), 1)) And InStr(varDelimited(i), ".") Then
       '--validate for IP address type
        '--delimit by dot
        varDotDelimited = Split(varDelimited(i), ".")
        '--validate for 4 segments : Split results in zero-indexed arrays
        If UBound(varDotDelimited) = 3 Then

            '--set trueCounter to zero
            trueCounter = 0

            '--validate each segment for a number between 0 and 255
            For j = LBound(varDotDelimited) To UBound(varDotDelimited)
                If IsNumeric(varDotDelimited(j)) And CInt(varDotDelimited(j)) >= 0 And CInt(varDotDelimited(j)) <= 255 Then
                        '--you can either save data into an array or any collection object and dump them later on to sheet
                        '--or simply throw a message box each time you find a valid IP address from Trash
                        trueCounter = trueCounter + 1
                End If
            Next j

            If trueCounter = 4 Then
                MsgBox varDelimited(i) & " is a valid IP Address"
            End If
        End If
    End If
Next i

End Sub

検証する別の方法は、を使用することRegexです。興味のある方は後からでも確認できます。

Sub validateIPRegex()
Dim strTrash As String
Dim objRegEx As Object
Dim matchedIPs As Object
Dim i As Integer
Dim allIPs As String

    Set objRegEx = CreateObject("VBScript.RegExp")
    objRegEx.IgnoreCase = True
    objRegEx.Global = True
    objRegEx.MultiLine = False
    '--this pattern doesn't consider 255. Just any 1 to 3 digit number between 0-9
    objRegEx.Pattern = "(\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b)"

    strTrash = "00:87:90:65:67:98 192.165.32.23 192.165.32.25 vlan.10 none"
    If objRegEx.Test(strTrash) Then
        Set matchedIPs = objRegEx.Execute(strTrash)
    End If

    If matchedIPs.Count <> 0 Then
        For i = 0 To matchedIPs.Count - 1
                allIPs = allIPs & " " & matchedIPs.Item(i)
        Next i
    End If

    MsgBox allIPs
End Sub
于 2013-10-02T16:50:19.717 に答える