Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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

VBS - InStr im Loop klappt nicht

Frage Entwicklung VB for Applications

Mitglied: waldgnarf

waldgnarf (Level 1) - Jetzt verbinden

27.09.2008, aktualisiert 17:56 Uhr, 7039 Aufrufe, 8 Kommentare

Hallo, der Spript liest die erste Zeile einer Textdatei ein und soll prüfen ob sich in dieser Zeile das Zeichen "-" befindet.
Aber das ganze steht in einem Loop, und darum funktioniert es nich wie normal.

01.
Set FSO=CreateObject("Scripting.FileSystemObject") 
02.
Set DATEI=FSO.GetFile("BLN.txt") 
03.
 
04.
Do 
05.
ZEILE=DATEI.OpenAsTextStream(1).ReadLine 
06.
If InStr(ZEILE,"-")<>0 Then 
07.
MsgBox ZEILE 
08.
End If 
09.
 
10.
LOESCHEN=DATEI.OpenAsTextStream(1).ReadAll&vbCrLF:DATEI.OpenAsTextStream(2).Write Replace(Mid(LOESCHEN,InStr(LOESCHEN,vbCrLF)+2),Chr(34),"") 
11.
 
12.
Loop Until ZEILE=""
Ich habe es nochmal getestet und jetzt klappt es ohne Loop auch nichtmer. :/

Gruß waldgnarf
Mitglied: bastla
27.09.2008 um 12:45 Uhr
Hallo waldgnarf!

Wenn Du nur die erste Zeile benötigst, ist ja die Schleife ohnehin überflüssig, es genügt:
01.
ZEILE=DATEI.OpenAsTextStream(1).ReadLine
Abgesehen davon: Was genau willst Du eigentlich erreichen?

Derzeit werden (unabhängig vom Inhalt der Zeile 1) aus der angegebenen Datei die gesamte Zeile 1 sowie alle Anführungszeichen entfernt.

Grüße
bastla
Bitte warten ..
Mitglied: waldgnarf
27.09.2008 um 13:08 Uhr
Hi bastla, ich wollte im Loop das die eingelesene Zeile falls sie ein "-" enhält als MsgBox ausgegeben und dann wie die anderen Zeilen die kein "-" enthalten gelöscht wird, dann zur nächsten Zeile ... .
Bitte warten ..
Mitglied: bastla
27.09.2008 um 13:15 Uhr
Hallo waldgnarf!

Verstehe ich es so richtig?
  • Es sollen alle Zeilen einzeln eingelesen werden.
  • Die erste Zeile soll, falls sie ein "-" enthält, als MsgBox ausgegeben werden, alle anderen Zeilen nicht.
  • Die erste Zeile soll auf jeden Fall gelöscht werden.
  • Alle weiteren Zeilen sollen, wenn sie kein "-" enthalten, ebenfalls gelöscht werden.

Was hattest Du mit den Anführungszeichen = Chr(34) vor?

Grüße
bastla
Bitte warten ..
Mitglied: waldgnarf
27.09.2008 um 13:47 Uhr
Es soll immer nur die erste Zeile eingelesen und dann gelöscht werden, und wenn die eingelesene Zeile ein ein Bindestrich enthält (irgendwo in der Mitte) dann soll die als MsgBox ausgegeben werden.

Ich bin ja noch anfänger im VBS und hab etwas wenn man so will aufgeschnappt ;), habe noch nicht nachgesehn was genau Chr(34) bedeutet.

Gruß waldgnarf
Bitte warten ..
Mitglied: bastla
27.09.2008 um 14:14 Uhr
Hallo waldgnarf!

Dann sollte ja genügen:
01.
Set FSO=CreateObject("Scripting.FileSystemObject") 
02.
Set DATEI=FSO.GetFile("BLN.txt") 
03.
 
04.
ZEILE=DATEI.OpenAsTextStream(1).ReadLine 
05.
If InStr(ZEILE,"-")<>0 Then MsgBox ZEILE 
06.
 
07.
LOESCHEN=DATEI.OpenAsTextStream(1).ReadAll & vbCrLF 
08.
DATEI.OpenAsTextStream(2).Write Mid(LOESCHEN,InStr(LOESCHEN,vbCrLF)+2)
Ist es übrigens Absicht, dass am Ende der Datei eine zusätzliche Zeilenschaltung eingefügt wird?

Grüße
bastla
Bitte warten ..
Mitglied: waldgnarf
27.09.2008 um 14:46 Uhr
Es funktioniert leider nicht, die Strings sehen z.B. so aus:
ANACARDIACEAE – Sumachgewächse
Mangifera indica / Mango
CORYLACEAE – Haselnussgewächse
Corylus avellana / Gewöhnliche Haselnuss

aber es kommt keine MsgBox Ausgabe bei enthalten eines Bindestrich

Im Prinziep geht es mir ja nur um das Unterscheiden von Arten und Pflanzen.
Aber ich hab nix passendes finden können was mit Grossbuchstaben zu tun hat.

Gruß waldgnarf
Bitte warten ..
Mitglied: bastla
27.09.2008 um 15:59 Uhr
Hallo waldgnarf!

Das Zeichen in dem von Dir geposteten Beispieltext ist kein "-", sondern ein "–" .

Auch wenn die beiden Zeichen sich optisch eigentlich nicht so sehr unterscheiden, ist doch das erste ein Chr(45), aber das zweite ein Chr(150).

Entweder gibst Du es daher mit der Tastenkombination Alt + 0150 (am Ziffernblock) ein, oder Du kopierst dieses Zeichen einfach aus der Textdatei in Deinen Code.
Um übrigens zu überprüfen, ob ein Wort ausschließlich aus Großbuchstaben besteht, gibt es verschiedene Möglichkeiten - wenn es schon genügt, festzustellen, dass keine Kleinbuchstaben enthalten sind, könnte das so aussehen:
01.
Wort = Split(ZEILE) 
02.
If Wort(0) = UCase(Wort(0)) Then MsgBox "Das erste Wort der Zeile enthält keine Kleinbuchstaben."
Das erste Wort in diesem Beispiel ist übrigens der Teil der Zeile vor dem ersten Leerzeichen.

Grüße
bastla

P.S.: Manchmal erweist es sich dann doch als vorteilhaft, in der Problembeschreibung etwas konkreter zu sein ...
Bitte warten ..
Mitglied: waldgnarf
27.09.2008 um 17:56 Uhr
:D, ja das Stimmt das mach ich nächstes mal besser, vielen vielen Dank bastla und noch schönes Wochenende.

Grüße waldgnarf
Bitte warten ..
Ähnliche Inhalte
Switche und Hubs
CPU durch L2-Loop defekt (4)

Frage von tvprog1 zum Thema Switche und Hubs ...

Batch & Shell
gelöst FOR Loop Variablen ( Batch ) (2)

Frage von clragon zum Thema Batch & Shell ...

LAN, WAN, Wireless
Loop-Protection - HP ProCurve und Cisco Small Business

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

LAN, WAN, Wireless
gelöst HP Switches - Frage zu Spanning Tree bzw. Loop Back Protection (12)

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

Neue Wissensbeiträge
Humor (lol)

Wohnt jemand in Belgien und kann nicht mehr ruhig ausschlafen?

(4)

Information von LordGurke zum Thema Humor (lol) ...

Sicherheits-Tools

Trendmicro OSCE und das Fall Creators Update Win10 RS3

(3)

Information von Henere zum Thema Sicherheits-Tools ...

Microsoft Office

Text in Zahlen umwandeln

Tipp von logische zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Microsoft Office
ICH BIN AM ENDE MEINES IT-WISSENS ANGELANGT!!!! (38)

Frage von 134537 zum Thema Microsoft Office ...

Windows Server
Gruppenrichtlinie greift nicht zu! (24)

Frage von Syosse zum Thema Windows Server ...

Hosting & Housing
Mailserver Software Empfehlungen (21)

Frage von sunics zum Thema Hosting & Housing ...

Voice over IP
DeutschlandLAN IP Voice Data M Premium, Erfahrung mit Faxgeräte? (16)

Frage von liquidbase zum Thema Voice over IP ...