2016-03-28 8 views
2

Bir metin belgesini veya tek bir alan CSV belgesini bir diziye çekmek ve diziden geçmeye çalışmak istiyorum.vbscript

Burada birkaç örnek görüyordum, ancak komut dosyasını çalıştırmakta başarısız olmaya devam ediyorum.

Daha önceki bir yararlı yayını kaçırırsam herhangi bir içgörü takdir edersiniz.

#$language = "VBScript" 
#$interface = "1.0" 

crt.Screen.Synchronous = True 

Sub Main 
Set fso = CreateObject("Scripting.FileSystemObject") 

Set hosts = fso.OpenTextFile("C:\Users\XXXX\Documents\2016\3 SmartServices\SNMPHosts.txt") 



Do Until hosts.AtEndOfStream 
    strNextLine = hosts.Readline 
    arrServiceList = Split(strNextLine , ",") 
Loop 

hosts.Close 

For Each item In hosts 
    crt.Screen.Send "telnet " & item & chr(13) 
    crt.Screen.WaitForString "username: " 
    crt.Screen.Send "UUUU" & chr(13) 
    crt.Screen.WaitForString "password: " 
    crt.Screen.Send "PPPP" & chr(13) 
    crt.Screen.WaitForString ">" 
    crt.Screen.Send "en" & chr(13) 
    crt.Screen.Send "PPPP" & chr(13) 
    crt.Screen.WaitForString "#" 
    crt.Screen.Send "conf t" & chr(13) 
    crt.Screen.WaitForString "(config)#" 
    crt.Screen.Send "COMMAND STATIC TEXT" & chr(13) 
    crt.Screen.Send "COMMAND STATIC TEXT" & chr(13) 
    crt.Screen.WaitForString "(config)#" 
    crt.Screen.Send "end" & chr(13) 
    crt.Screen.WaitForString "#" 
    crt.Screen.Send "wr" & chr(13) 
    crt.Screen.WaitForString "#" 
    crt.Screen.Send "exit" & chr(13) 
    crt.Screen.WaitForString "WAIT END STRING" 
Next 
End Sub 
+0

Host dosyalarınızın biçimi nedir? Varsa hangi hata mesajını alırsınız? "Çalışmıyor", sorun açıklaması olarak kullanılmaz. Oh, ve Stack Overflow'a hoş geldiniz! –

+0

Sorunuzu düzenleyin ve .csv verilerinizi gönderin – Hackoo

+0

Ayrıca aşağıdakilerden de ilham alabilirsiniz: [İşlev ReadFile (yol, mod)] (http://stackoverflow.com/questions/35299606/read-text-and-match-all -ürünler-içinde-metin-dosya-aksi-yazma-değeri-hata-txt-fi? answertab = aktif # tab-top) – Hackoo

cevap

1

Bölme komutu, ihtiyacınız olan şeydir. Yani ReadAll yerine https://www.microsoft.com/en-au/download/details.aspx?id=2764

Bölünmüş Fonksiyonlu Yardım itibaren

MyVar = Split(hosts.ReadAll, vbcrlf) 

For Each thing in MyVar 
    Msgbox Replace(thing, ",", "") 
Next 

ReadLine daha

alt dizeleri belirtilen sayıda içeren bir sıfır tabanlı, tek boyutlu dizi döndürür.

Split(expression[, delimiter[, count[, compare]]]) 

Kullanım virgül kaldırmak için değiştirin.

+0

Onlar zaten 'Split()' sorunu kullanıyorlar doğru yapmıyoruz. Ayrıca, "Readline()" ın kullanılması, eğer virgüllerin sadece bir diziye göre satır satır okunması gerektiğinden emin olmak isterlerse iyi olurdu. ReadAll() yöntemi ile ilgili sorun, CSV'deki her satırın sonunda, daha büyük dosyalar için daha az verimli olduğundan bahsetmeden, Carriage Return + Linefeed'de de okuyacaktır. – Lankymart

+0

Ama bir dizi yapar. Tek alanlı CSV'nin virgülü yok. –

+0

Adil nokta, sorudaki tek alan bitini fark etmedi, tek bir satır için iyi çalışmalı. Ayrıca, tek bir alanın CSV'nin virgül içermeyen yeni satırları olmadığı anlamına da gelebileceğini düşünün * (çünkü bunlar bir CSV'dir). – Lankymart