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

Unterscheiden zwischen Zahlen und Buchstaben

Frage Entwicklung VB for Applications

Mitglied: Calim3ro

Calim3ro (Level 1) - Jetzt verbinden

03.06.2014, aktualisiert 10.06.2014, 1189 Aufrufe, 6 Kommentare

Hallo zusammen

Ich habe eine Textdatei mit folgendem Inhalt:

Salzburg 123456
1234567 Berlin
2345678 Hamburg
3456789 Wien
4567890 Koeln
Hamburg 2345678

Nun möchte ich von der ersten und letzten Zeile die Position 1-7 als String ausgeben, sofern diese numerisch sind. (prüfung auf reine Zahlenfolge notwendig)

Wie müsste so ein Script in VB aussehen,? Besten Dank für eure Bemühungen schon mal im Voraus.

Bei Fragen einfach nachfragen.

Gruss Nickpicker
Mitglied: colinardo
03.06.2014, aktualisiert um 17:07 Uhr
Hallo Nickpicker,
also wenn ich dich richtig verstanden habe etwa so:
01.
'Pfad der Datei 
02.
datei = "c:\DeineDatei.txt" 
03.
 
04.
Set fso = CreateObject("Scripting.Filesystemobject") 
05.
Set regex = CreateObject("vbscript.regexp") 
06.
 
07.
'nur Zahlen erlauben 
08.
regex.Pattern = "^\d+$" 
09.
 
10.
' Textfile in ein Array bestehend aus den einzelnen Zeilen einlesen 
11.
arrLines = Split(fso.OpenTextFile(datei).ReadAll(),vbNewLine,-1,1) 
12.
 
13.
'Teste die erste Zeile der Textdatei 
14.
If regex.Test(Left(arrLines(0),7)) Then 
15.
	MsgBox Left(arrLines(0),7) 
16.
End If 
17.
 
18.
'Teste die letzte Zeile der Textdatei 
19.
If regex.Test(Left(arrLines(UBound(arrLines)),7)) Then 
20.
	MsgBox Left(arrLines(UBound(arrLines)),7) 
21.
End If
Grüße Uwe
Bitte warten ..
Mitglied: Calim3ro
03.06.2014 um 16:39 Uhr
Hallo Uwe

Besten Dank für deine schnelle Rückmeldung.
Ich habe dein Skript kopiert und den Pfad zur Datei angepasst. Als String (MsgBox) erhalte ich jedoch jeweils nur "4567890", das erwartete "1234567" bleibt jedoch aus.

Bin leider kein Hirsch in VBS und konnte den Fehler nicht selber finden.
Kannst du dir das nochmal anschauen?

Gruss Nickpicker
Bitte warten ..
Mitglied: colinardo
03.06.2014, aktualisiert um 17:04 Uhr
Dann ist mir noch nicht klar was du willst, ich bin jetzt davon ausgegangen das wenn in Zeile 1 und der letzten Zeile z.B. anstatt des Wortes Salzburg oder Hamburg dort eine eine Zahlenfolge an der Zeichenposition 1-7 steht diese gemeldet werden soll... Also und diesem Beispiel garnichts ...

Salzburg 123456 < hier steht an Position 1-7 nur Text (keine Meldung)
1234567 Berlin
2345678 Hamburg
3456789 Wien
4567890 Koeln
Hamburg 2345678 < hier steht an Position 1-7 nur Text (keine Meldung)

in diesem Beispiel dann nur die 2345678

Salzburg 123456 < hier steht an Position 1-7 nur Text (keine Meldung)
1234567 Berlin
2345678 Hamburg
3456789 Wien
4567890 Koeln
2345678 blabla < hier steht an Position 1-7 eine Zahlenfolge also melde es

oder habe ich da was missverstanden ?
Bitte warten ..
Mitglied: Calim3ro
04.06.2014 um 13:55 Uhr
Sorry, da habe ich mich wohl etwas unklar ausgedrückt.

Es sollte in jedem Fall zwei Zahlen ausgegeben werden.
Und zwar von der ersten numerischen Zeile (Pos 1-7) und letzte Zeile, welche Position 1-7 aus numerischen Werten bestehen.

Im Beispiel müsse also 1234567 & 4567890 ausgegeben werden, da Salzburg 123456 auf Pos. 1-7 nicht rein numerisch ist.
Somit muss diese Zeile ignoriert werden und zur nächsten Zeile wechseln. Das gleiche von untern her, Hamburg 2345678 ist auf Pos 1-7 nicht numerisch, also sollte Pos. 1-7 der Zeile darüber ausgegeben werden, sofern diese numerisch ist.

Hoffe konnte die Unklarheiten beseitigen.
Gar nicht einfach, sowas zu erklären.

Besten Dank für deine Hilfe.
Bitte warten ..
Mitglied: colinardo
LÖSUNG 04.06.2014, aktualisiert 10.06.2014
Hoffe konnte die Unklarheiten beseitigen.
Ah OK jetzt alles klar
01.
dim strWert1, strWert2, regex, fso, arrLines, datei 
02.
datei = "c:\DeineDatei.txt" 
03.
Set fso = CreateObject("Scripting.Filesystemobject") 
04.
Set regex = CreateObject("vbscript.regexp") 
05.
regex.Pattern = "^\d+$" 
06.
arrLines = Split(fso.OpenTextFile(datei).ReadAll(),vbNewLine,-1,1) 
07.
For i = 0 To UBound(arrLines) 
08.
	If regex.Test(Left(arrLines(i),7)) Then 
09.
		strWert1 = Left(arrLines(i),7) 
10.
		Exit For 
11.
	End If 
12.
Next 
13.
For i = UBound(arrLines) To 0 Step -1 
14.
	If regex.Test(Left(arrLines(i),7)) Then 
15.
		strWert2 = Left(arrLines(i),7) 
16.
		Exit For 
17.
	End If 
18.
Next 
19.
msgbox "Wert1: " & strWert1 & " / Wert2: " & strWert2  
20.
set fso = Nothing 
21.
set regex = Nothing
das ganze ließe sich auch noch weiter vereinfachen indem man komplett über ein einzelnes Regex-Pattern und Groupmatches geht (wollte aber das du das obige noch halbwegs verstehst):
01.
dim strWert1, strWert2, regex, fso, content, datei 
02.
datei = "c:\DeineDatei.txt" 
03.
Set fso = CreateObject("Scripting.Filesystemobject") 
04.
Set regex = CreateObject("vbscript.regexp") 
05.
regex.Multiline = True 
06.
regex.Pattern = "^(\d{7})[\s\S]*^(\d{7})" 
07.
content = fso.OpenTextFile(datei).ReadAll() 
08.
Set matches = regex.Execute(content) 
09.
If matches.Count > 0 Then 
10.
	strWert1 = matches(0).Submatches(0) 
11.
        strWert2 = matches(0).Submatches(1) 
12.
	MsgBox "Erster Wert: " & strWert1 & vbNewLine & "Zweiter Wert: " & strWert2 
13.
End If 
14.
set fso = Nothing 
15.
set regex = Nothing 
16.
set matches = Nothing
Grüße Uwe
Bitte warten ..
Mitglied: colinardo
LÖSUNG 10.06.2014, aktualisiert um 18:23 Uhr
Wenns das dann war, den Beitrag bitte noch als gelöst markieren, merci.

Grüße Uwe
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Humor (lol)
Der Unterschied zwischen USA und USB

Link von BirdyB zum Thema Humor (lol) ...

Windows Server
AD Replikation zwischen untergeordneten Domäne zwingend? (4)

Frage von Gien-app zum Thema Windows Server ...

C und C++
gelöst Anzahl der Buchstaben in einem String Element Array C++ (3)

Frage von Protected zum Thema C und C ...

Microsoft Office
Button für Wechseln zwischen den Tabellenblättern (6)

Frage von lupi1989 zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...