Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

TXT zeilenweise per VBS auslesen

Frage Entwicklung VB for Applications

Mitglied: VBSnoobDlu

VBSnoobDlu (Level 1) - Jetzt verbinden

03.08.2007, aktualisiert 29.11.2007, 18607 Aufrufe, 15 Kommentare

So Servus ich habe folgende txt Datei

Systeme.txt

in dieser Datei stehen PC-Namen drinne ...

PC1
PC2
PC3

nun sollen die Namen per VB-Script ausgelesen werden und in Variablen gespeichert werden, die aller dings auch dynamisch angelegt werden sollen, dass heißt sind in der txt 10 Namen 10 Variablen anlegen und soweiter...

habe noch kein Code würde mich aber freuen wenn mir das jemand schreiben könnte

Mit freundlichem Gruß
Daniel


und Danke schonmal
Mitglied: AndreasHoster
03.08.2007 um 14:25 Uhr
Nö, kann niemand, weil Variablen dynamisch anlegen geht nicht. Macht auch keinen Sinn, weil wie willst Du danach Programmiertechnisch drauf zugreifen, wenn man den Namen nicht kennt?
Schon mal was von einem Array oder Variablenfeld gehört?
Ein Array ist ein Konstrukt, welches man unter einem Namen ansprechen kann und mittels Index mehrere Werte reinschreiben kann und wieder auslesen. Sozusagen Strassenname mit Hausnummern der verschiedenen Lager.

Set fso = CreateObject("Scripting.FileSystemObject")
Set oFile = fso.OpenTextFile("C:\Systeme.txt")
i=0
' Erstmal zählen wieviele Einträge
while not oFile.AtEndOfStream
i=i+1
oFile.ReadLine
Wend
oFile.Close
' Array definieren
REDIM sEingabe(i)
Set oFile = fso.OpenTextFile("C:\Systeme.txt")
i=0
' Jetzt Werte ins Array übernehmen
while not oFile.AtEndOfStream
sEingabe(i)=oFile.ReadLine
i=i+1
Wend
oFile.Close
' Beispiel für Zugriff
MsgBox "Wert an Index 0: " & sEingabe(0)
MsgBox "Wert an Index 3: " & sEingabe(3)

Kein schönes Beispiel, tut aber und in VB-Script würde ich auch eher ein Dictionary Objekt verwenden (Arrays gibts halt in praktisch jeder Sprache):

Set fso = CreateObject("Scripting.FileSystemObject")
Set oDict = CreateObject("Scripting.Dictionary")
Set oFile = fso.OpenTextFile("C:\Systeme.txt")
'Direktes Einlesen, Dictionary Objekt darf nämlich beliebig wachsen
i=0
while not oFile.AtEndOfStream
oDict.add i,oFile.ReadLine
i=i+1
Wend
oFile.Close
' Beispiel für Zugriff
MsgBox "Wert an Index 0: " & oDict.Item(0)
MsgBox "Wert an Index 3: " & oDict.Item(3)


EDIT: Wenn ich die Code-Beispiel mit < code > versuche zu formatieren, sieht man nichts mehr von meinem Text. Deswegen ohne Code Formatierung.
Bitte warten ..
Mitglied: bastla
05.08.2007 um 17:50 Uhr
Hallo VBSnoobDlu und AndreasHoster!

Auch ich würde als "dynamische" Variable nur ein Array für sinnvoll halten, und dann (ewas knapper formuliert) zB so vorgehen (um gleich das obige Beispiel zu übernehmen):
01.
Const sInFile = "C:\Systeme.txt" 
02.
aEingabe = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(sInFile, 1).ReadAll, vbCrLF) 
03.
MsgBox "Wert an Index 0: " & aEingabe(0) 
04.
MsgBox "Wert an Index 2: " & aEingabe(2)
Grüße
bastla
Bitte warten ..
Mitglied: VBSnoobDlu
06.08.2007 um 06:45 Uhr
Danke für eure antworten hat mir sehr weiter geholfen
habe mich für ein 2 D array entschieden da ich da noch ein paar mehr möglichkeiten habe die ich gebrauchen kann

Nur wie lege ich es in VBS an ???
kann mir das noch jemand sagen ???
in java weiß ich es nur in VBS net ...
Bitte warten ..
Mitglied: VBSnoobDlu
06.08.2007 um 07:30 Uhr
Ok ich muss die Frage nochmal umstellen :P

Also meine TextDatei sieht wie folgt aus...

PC-Name
c;d;e
Zielpfad

PC-Name2
c;d
Zielpfad2

Nun soll er die Daten auslesen und in einem 2D-Array abspeichern ....
PC-Name c d e Zielpfad
PC-Name2 c d Zielpfad2


Wie bekomme ich das hin ???
habe keine Ahnung wie ich in VBS eine TXT einlese und Zeilen nach einem Zeichen Trenne ...
desweiteren ein 2 D Array öffnen.
Bitte warten ..
Mitglied: AndreasHoster
06.08.2007 um 08:30 Uhr
@bastla:
An Split hatte ich gar nicht gedacht, guter Hinweis.
Bitte warten ..
Mitglied: AndreasHoster
06.08.2007 um 09:07 Uhr
Na ja, TXT einlesen sollte man anhand der Beispiele ja schon machen können.
Wenn man sich das Skript von Bastla anschaut, kriegt man das Trennen nach Zeichen: Split
Split(Text,Trennzeichen) gibt ein Array zurück mit entsprechend vielen Elementen je nach Trennzeichen.
Also Split("C;D;E",";") ergibt ein Array mit a(0)="C", a(1)="D" und a(2)="E"
Ein mehrdimensionaler Array geht praktisch wie ein eindimensionaler, nur hat man mehrere Indizes:
REDIM a(10,10,10) wäre ein 3D Array. Es sollten bis 60 Dimensionen gehen, habe das aber noch nicht ausprobiert.

Und insgesamt solltest Du Dir ein paar Gedanken über Deine Datenstruktur machen.
Ein 2D Array mit sagen wir 10x5 Elementen ist bei:
Name1_c_d_e_Pfad
Name2_c_d___Pfad
ungeeignet, weil es wohl verschiedene Anzahl von c,d,e ... gibt und irgendwann kommt f und dann reichen 5 nicht. Und vorsorglich mal 1000 reservieren ist auch kein schöner Programmierstil und auch nicht ressourcenschonend.
Bitte warten ..
Mitglied: VBSnoobDlu
06.08.2007 um 09:33 Uhr
So ich danke euch noch einmal
und habe nur noch eine frage ...
gibt es in VBS einen Sprung befehl sowie in VB ?
Bitte warten ..
Mitglied: bastla
06.08.2007 um 10:01 Uhr
Hallo VBSnoobDlu!

gibt es in VBS einen Sprung befehl sowie in VB ?
Was es alles in VBS gibt, findest Du zB in der Doku scd56.chm oder scd56de.chm (Download siehe etwa http://dieseyer.de/dse-downloads.html) ...

Ansonsten: Was verstehst Du konkret unter "Sprung" und wozu würdest Du ihn brauchen?
Zum Einlesen der Textdatei mit Datensätzen über 3 (oder, falls die in Deinem Beispiel dargestellte Leerzeile auch in der Datei steht, 4) Zeilen mit zum Teil unterschiedlicher Feldanzahl könntest Du auf Basis der "Dictionary"-Variante von AndreasHoster etwa so vorgehen:
01.
Set fso = CreateObject("Scripting.FileSystemObject") 
02.
Set oDict = CreateObject("Scripting.Dictionary") 
03.
Set oFile = fso.OpenTextFile("Z:\Systeme.txt") 
04.
 
05.
i = 0 
06.
iMaxField = 0 
07.
Do While Not oFile.AtEndOfStream 
08.
	sLine1 = oFile.ReadLine 'PC-Name 
09.
	sLine2 = oFile.ReadLine 'c;d;e 
10.
	sLine3 = oFile.ReadLine 'Zielpfad 
11.
	sLine4 = oFile.ReadLine 'Leerzeile 
12.
	oDict.Add i, sLine1 & ";" & sLine3 & ";" & sLine2 
13.
	aTemp = Split(sLine2, ";") 
14.
	If UBound(aTemp) > iMaxField Then iMaxField = UBound(aTemp) 
15.
	i = i + 1 
16.
Loop 
17.
oFile.Close 
18.
 
19.
iMaxRec = i 'Höchster Datensatzindex 
20.
iMaxField = iMaxField + 2 'Höchster Feldindex (zusätzlich zu iMaxField aufgrund "c;d;e" Felder für PC-Name und Zielpfad) 
21.
ReDim aSysteme(iMaxRec, iMaxField) 
22.
For i = 0 To iMaxRec 
23.
	aTemp = Split(oDict.Item(i), ";") 
24.
	For j = 0 To UBound(aTemp) 
25.
		aSysteme(i, j) = aTemp(j) 
26.
	Next 
27.
Next 
28.
'Dictionary löschen 
29.
Set oDict = Nothing 
30.
 
31.
'Beispiel für Zugriff 
32.
MsgBox "Wert 'e' aus Satz 0: " & aSysteme(0, 4) 
33.
MsgBox "Wert 'e' aus Satz 1: " & aSysteme(1, 4)
Ablauf:
Zunächst werden alle (4, da Leerzeile berücksichtigt) zu einem Satz gehörigen Zeilen eingelesen und in umgestellter Reihenfolge (PC-Name; Zielpfad; c; d; e; f; ...) durch ";" getrennt als zusammengehöriger Eintrag in einem Dictionary-Element gespeichert. Dabei wird auch die benötigte Feldanzahl für (c; d; ...) ermittelt.

Im zweiten Schritt kann ein passendes Array deklariert und aus den einzelnen Dictionary-Einträgen befüllt werden, wobei zunächst aus jedem Datensatz über Split() ein temporäres (eindimensionales) Array erstellt wird, dessen Elemente dann in das Ergebnis-Array übertragen werden können.

Hat in einem Datensatz ein Feld keinen Inhalt (zB fehlendes "e" beim Satz für "PC-Name2"), bleibt das Array-Feld (siehe zweite MsgBox-Ausgabe) leer.

Grüße
bastla
Bitte warten ..
Mitglied: VBSnoobDlu
06.08.2007 um 10:04 Uhr
Danke ... :P

ich verstehe und einem Sprung befehl folgendes ....
wenn eine bestimmte bedingung eintritt gehe zu folgendem Punkt...

unter VBA gibt es GoTo methode
unter Assembler LJMP

unter Java und c gibt es keinen,
wie sieht es in VBS aus
Bitte warten ..
Mitglied: bastla
06.08.2007 um 10:12 Uhr
Hallo VBSnoobDlu!

Da Du ewähntest, in java zu programmieren, war ich etwas verwundert - daher die Nachfrage wegen des Sprunges ...

"GoTo" gibt es in VBS eigentlich nur in Zusammenhang mit dem Errorhandling (On Error GoTo 0), es stehen Dir aber Kontrollstrukturen wie "If-Then-Else(If)-End If" oder "Select Case" zur Verfügung.

Grüße
bastla
Bitte warten ..
Mitglied: VBSnoobDlu
06.08.2007 um 14:23 Uhr
gibt es ne möglich keit abzufragen ob ein System online ist ???

also das script für ne Datensicherung durch und wenn das System nicht da ist quasi abgeschaltet ist soll er mir was in eine log schreiben ....
das ist alles soweit fertig nur weiss nicht wie ich überprüfe ob ein System online ist ...
kann mir da nochmal wer helfen

nochmal danke im vorraus
Bitte warten ..
Mitglied: bastla
06.08.2007 um 14:31 Uhr
Hallo VBSnoobDlu!

Mittlerweile sind wir schon ziemlich OT, daher beim nächsten Mal bitte einen neuen Beitrag ...
Du könntest den Zielrechner einfach anpingen, etwa wie hier gezeigt: http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept04/he ...

Anstelle der IP-Adresse kannst Du auch den Computernamen einsetzen.

Grüße
bastla
Bitte warten ..
Mitglied: VBSnoobDlu
06.08.2007 um 15:43 Uhr
Danke für den link allerdings bekomme ich es net hin ....
habe es ein wenig umgeschrieben auch nicht die erste XP Version sondern die beiden andern ...
und trotzdem bekomme ich keine connectivität ....

kann mir das mal jemand erläutern ?
Bitte warten ..
Mitglied: bastla
06.08.2007 um 15:50 Uhr
Hallo VBSnoobDlu!

Das wäre jetzt wirklich der Moment, einen neuen Beitrag mit einem Thema wie "Ping mit VBScript" zu eröffnen und dort Dein Script reinzustellen ...

Grüße
bastla
Bitte warten ..
Mitglied: VBSnoobDlu
29.11.2007 um 09:04 Uhr
Hat auch ohne weitere Probleme Funktioniert,
ich danke allen hilfsbereiten.

Gruß
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Entwicklung
Zählerstände über SNMP und VBS auslesen (4)

Frage von motofuzy zum Thema Entwicklung ...

VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...