首先,我想告訴我的代碼可以完美處理的輸入數據。在您的輸入數據中,「IP地址」和「主機名」的節奏必須相同。我是指那些對如下靜態序列:
................................
- --------------------------
IP地址:
主機名:
................ ................
---------------------------
IP地址:
主機名:
................................
--------------- ------------
IP:
主機名:
............................... 。
---------------------------
IP Address:
................ ........ ........
---------------------------
IP地址:
主機名:
的輸入數據必須是該串行格式。只有在這種格式下,我的代碼才能正常工作。好..?我的意思是它不能用於以下串行輸入:
................................
---------------------------
IP Address:
Hostname:
............... .................
---------------------------
IP地址:
主機名:
................................
---------------------------
主機名:
IP地址:
所以,我做了小的修改,以您的輸入數據如下:
Please refer to CR_Implementation_Reversion_Plan UNIX and Informatica (9.1)
---------------------------------------------------------------------------------
IP Address: 10.89.140.123, 10.89.140.125, 10.89.140.127, 10.89.140.92
Hostname: a01gbiapp1a, a01gbiapp1b, a01gbiapp1z, w01ggdwtd1a
Informatica ID: proddeploy(Informatica)
Unix ID:cbitimpl, root(su- bipadm,pdm, bipxtr, bdwadm, cpmsadm, dqadm, rmgadm, cbgadm,
bdwxtr, hkb2adm, biptwadm, bipinadm, bipcnadm, biphkadm, bipidadm, bipotadm)
UNIX and Informatica (7.1)
---------------------------------------------------------------------------------
IP Address: 10.89.140.52, 10.89.140.53, 10.89.140.37, 10.89.140.37
Hostname: a01ginf1a , a01ginf1b, a01ginf1z, a01ginf1z
Informatica ID: proddeploy(Informatica)
Unix ID: cbitimpl, root(su- bipadm, bipdm, bipxtr, bdwadm, cpmsadm, dqadm, rmgadm,
cbgadm, bdwxtr, hkb2adm, biptwadm, bipinadm, bipcnadm, biphkadm, bipidadm,
bipotadm)
Teradata
---------------------------------------------------------------------------------
IP Address: 10.89.140.97
Hostname: r01gtddb1a
ID: fdwadmin, bdwadmin
InformaticaClient
---------------------------------------------------------------------------------
IP Address: 10.89.140.92
Hostname: w01gdnv1a or w01ggdwtd1a or w01ggdwtd10a
ID: infadeploy(Informatica Client)
BO implementation:Draw Rack Keys:
---------------------------------------------------------------------------------
IP: 10.89.140.105, 10.89.140.106, 10.89.140.48, 10.89.140.49
Hostname: W01GBOXIAPP1A, W01GBOXIAPP2A, W01GBOXIAPP3A, W01GBOXIAPP4A
BO ID: boimpl
SAS
---------------------------------------------------------------------------------
IP ADDRESS: 10.89.136.122, 10.89.136.125, 10.89.136.126
Hostname: w01gsaseapp1a, a01gsaseapp1a, a01gsaseapp2a
SAS ID: sas_impl
Power Exchange
---------------------------------------------------------------------------------
IP Address: 10.80.250.73
ID: DMSDDTL1, DMSDDTL2, DMSDDTL3
UI
---------------------------------------------------------------------------------
IP Address: 10.89.140.112
Hostname: A01GWAWEB1A
ID: wasuser
WODM
---------------------------------------------------------------------------------
IP Address: 10.89.140.109
Hostname: A01GWABRE1A
ID: wodmadm
DB2 Server
---------------------------------------------------------------------------------
IP Address: 10.89.140.113
DB : DBSWATS
Schema : watsusr
DBS_IBMSG_BTEAM:
Pls allow Ramakishore M/ Prashanth Badugu/ Srinivasa Theerdhala Part B and
Satish Parmarthy/Dileep EP/Krishna Reddy/Raghavendra Goud Part A to withdraw
the "infaoper" and "proddeploy" ID for server a01gbiapp1a, a01gbiapp1b, a01gbiapp1z.
我修改我的運行代碼,輸入如下:
Public Sub splitHostnameAndIPAddress()
Dim addressStream As String
Dim lineList() As String
Dim line As Integer
Dim tempHosts, tempIps As String
Dim hostList(), ipList() As String
Dim hostIndex, ipIndex, tempIndex As Integer
Dim result As String
Dim ipFlag As Boolean
hostIndex = 1
ipIndex = 1
'Get address string from cell
addressStream = Sheets("Sheet5").Range("A1")
'Split by vbLf(line by line)
lineList = Split(addressStream, vbLf)
'Loop all line
For line = 0 To UBound(lineList)
'If "IP Address" string include in line, store ip address
If InStr(lineList(line), "IP Address") Or InStr(lineList(line), "IP ADDRESS") Or InStr(lineList(line), "IP") Then
'Check for getting right pair.
If ipFlag Then
hostIndex = hostIndex + 1
Else
ipFlag = True
End If
'Getting Ip(s)
tempIps = Trim(Split(lineList(line), ":")(1))
'If there is several ip in string which are separated by ","
If InStr(tempIps, ",") Then
'Loop ip list which is separated by "," and store
For tempIndex = 0 To UBound(Split(tempIps, ","))
ReDim Preserve ipList(ipIndex)
ipList(ipIndex) = Trim(Split(tempIps, ",")(tempIndex))
ipIndex = ipIndex + 1
Next tempIndex
'Else single ip is store
Else
ReDim Preserve ipList(ipIndex)
ipList(ipIndex) = tempIps
ipIndex = ipIndex + 1
End If
'If "Hostnames" string include in line, store host name
ElseIf InStr(lineList(line), "Hostname") Then
'Check for getting right pair.
If ipFlag Then
ipFlag = False
Else
ipIndex = ipIndex + 1
End If
'Getting host(s)
tempHosts = Trim(Split(lineList(line), ":")(1))
'If there is several host in string which are separated by ","
If InStr(tempHosts, ",") Then
'Loop host list which is separated by "," and store
For tempIndex = 0 To UBound(Split(tempHosts, ","))
ReDim Preserve hostList(hostIndex)
hostList(hostIndex) = Trim(Split(tempHosts, ",")(tempIndex))
hostIndex = hostIndex + 1
Next tempIndex
'Else single host is store
Else
ReDim Preserve hostList(hostIndex)
hostList(hostIndex) = tempHosts
hostIndex = hostIndex + 1
End If
End If
Next line
'Adjust two list size
If hostIndex > ipIndex Then
ReDim Preserve ipList(hostIndex - 1)
ElseIf ipIndex > hostIndex Then
ReDim Preserve hostList(ipIndex - 1)
End If
'Loop host list
For index = 1 To UBound(hostList)
'Add host & ip pair
result = result & ipList(index) & vbTab & hostList(index) & vbNewLine
Next index
'Show result
MsgBox result
End Sub
然後,我測試了我的代碼,我得到了以下的結果。
![enter image description here](https://i.stack.imgur.com/3FSaV.png)
我嘗試我能爲這個問題。我再也想不到下一個輸入數據了。所以,根據我的建議嘗試調整輸入數據。如果可以,您可以修改我的代碼以符合您的要求。感謝您提出具有挑戰性的問題。
究竟怎樣的文字出現在細胞?是否有換行符? –
@AlexP \t 是的,它看起來和我在問題中上傳的截圖完全一樣,有很多換行符。 – excel
說清楚,這一切文本是在一個單元還是多個單元?不清楚..! –