Anzahl Zeichen einer Variable zählen

mycroftone

Hallo Zusammen

Ich habe eine Einfach Frage aber leider in den ganzen Beiträgen keine Lösung gefunden.

Ich höchte die Anzahl von Zeichen in eine Variable Zählen.

Ich habe eine Variable die das Datum darstellt ( bekomme ich aus logdateien)
Sie sieht Standardmäßig so aus -> 2009-04-29
Jetzt bekommen Ich aber auch Logdateien in denen das Datum falsch geliefert wird -> -~-2,2-

Also möchte ich jetzt durch Zählen der Zeichen rausfinden ob ich ein gültiges Dateum bekomme.

Befehl 2009-04-29
10

Befehl -~-2,2-
7

Wie ich in eine Beitrag schon gelesen habe mach es eine Unterschied die Anzahl Zeichen einer Zeile zu lese.
Oder die Anzahl Zeiten einer Datei zu Zählen. Das kann ich dank dieses Forums schon.

Content-Key: 115075

Url: https://administrator.de/contentid/115075

Ausgedruckt am: 23.01.2022 um 05:01 Uhr

Mitglied: 77559
77559 30.04.2009 um 17:38:50 Uhr
Goto Top
Hallo,

ich halte den Ansatz für nicht so sinnvoll, parse auf die Elemente und überprüfe ob ein gültiges Datum dabei rauskommt.


Only braintested

Klar ist das noch auf unmögliche Daten zu prüfen ist 29.2. ohne Schaltjahr etc.

Gruß
LotPings

Edit: Übersichtlicher formatiert
Mitglied: mycroftone
mycroftone 30.04.2009 um 17:49:56 Uhr
Goto Top
Ja danke das ist natürlich die Luxusversion des Datumprüfens.
Werde ich ausprobieren

Kann mir Trotzdem jemand sagen wie ich die Zeichen in einer Zeile Zähle
Mitglied: Biber
Biber 30.04.2009 um 17:56:49 Uhr
Goto Top
Moin mycroftone,

willkommen im Forum.
Wie Lotpings schon schrieb - eine Prüfung auf Gültigkeit/Richtigkeit ist sinnvoller als eine Prüfung auf Ungültigkeit.
Und mit einer Prüfung "Ist eine Variable 10 Zeichen lang, dann wird es wohl ein brauchbares Datum sein" überlebst Du im IT-Welt circa 12,7 sec.

Aber wenn es Dir ausreichend erscheint:
-> Wenn eine Variable nur 7 Zeichen lang ist und
-> Du fragst eine Substring-Funktion nach dem Teilstring von Zeichen 8 an in der Länge 3
-> dann wirst Du bei allen mir bekannten SubStr()-varianten dieser Galaxie einen Leerstring zurückbekommen.
Auch von der CMD.exe
Demo am CMD-Prompt:

Wenn Du also vorrangig diese fehlerhaften 7stelligen Datums-Werte abfangen willst--> prüfe es so.

Grüße
Biber
Mitglied: Biber
Biber 30.04.2009 um 18:11:31 Uhr
Goto Top
... und wenn es unbedingt sein soll...
Zitat von @mycroftone:
Kann mir Trotzdem jemand sagen wie ich die Zeichen in einer Zeile Zähle

In der Theorie könntest Du in einer Zählschleife (FOR /L-Anweisung) das Ende des Strings finden

--Auch nicht getestet--

Grüße
Biber
Mitglied: 77559
77559 30.04.2009 um 18:21:14 Uhr
Goto Top
Zitat von @mycroftone:
Kann mir Trotzdem jemand sagen wie ich die Zeichen in einer Zeile Zähle

HTH
Mitglied: mycroftone
mycroftone 06.05.2009 um 19:12:43 Uhr
Goto Top
Hi Lotpings

Sorry das ich mich erste jetzt melde aber irgendwie funktioniert dein Script noch nicht so richtig.
Nur was mach ich falsch? Habe jetzt folgende Batch Datei erstellt.

  1. @echo off & setlocal EnableDelayedExpansion
  2. set Datum=2009-04-07
  3. for /F "tokens=1-3 delims=-" %%A in ("%Datum%") Do set /A "Jahr=%%A,Monat=%%B,Tag=%%C"
  4. if Defined Jahr if %Jahr% GEQ 1980 if %Jahr% LEQ 2100^
  5. if Defined Monat if %Monat% GEQ 1 if %Monat% LEQ 12^
  6. if Defined Tag if %Tag% GEQ 1 if %Tag% LEQ 31
  7. goto :weiter
  8. echo Ungültiges Datum: %Datum%
  9. pause
  10. exit
  11. :weiter
  12. echo gültiges Datum: %Datum%
  13. pause
  14. exit

  • Wenn ich ein gültiges Datum angebe

kommt bei dem if Defined ein Syntaktfehler

  • Wenn ich ein ungültige Datum eingebe.

Kommt bei ~009_04_07

Ungültige Zahl. Numerische Konstanten sind entweder dezimale (17),
hexadezimale (0x11) oder oktale (021) Zahlen.
und dann Syntaktfehler

Und bei -~-2,2
Fehlender Operand
und dann Syntaktfehler


Kannst du oder jemand anders mir sagen was da Falsch läuft.
Mitglied: 77559
77559 06.05.2009 um 19:38:19 Uhr
Goto Top
Hallo,

du musst das ja auch korrekt übertragen am Besten Über dem Codeteil auf Quelltext klicken und alles markieren/kopieren.

Die Zeile 7 goto :weiter gehört ans Ende deiner Zeile 6 so wie es auch von mir gepostet wurde.
Die Zeilen 4, 5 und 6 (+7) sind eigentlich eine einzige Zeile, der Übersicht halber habe ich die mit Hilfe des ^ am Emde umgebrochen ohne das sie logisch getrennt sind.
Nur wenn wirklich alle if Bedingungen erfüllt sind geht es Weiter, Durch dein Trennen geht es in jedem Fall weiter und da dem letzten IF der Then Teil fehlt gibt es einen Fehler.

Und wenn du im Editorfenster bist sieh dir bitte den roten Link Formatierungshilfe an.
Dann kann man deinen Text auch besser lesen wenn code eben mit
markiert wird (dann ohne Leerzeichen hinter dem < )

Gruß
LotPings
Mitglied: mycroftone
mycroftone 08.05.2009 um 00:22:26 Uhr
Goto Top
Hallo LotPings

Dannke für den Hinweis auch im Umgange mit dem Forum hier

Habe jetzt folgende Batchdatei



Also Ausgabe habe ich dann



Teste

gueltige Datum: 2009-04-29

Drücken Sie eine beliebige Taste . . .

Teste

Fehlender Operand

gueltige Datum: -~-2


Drücken Sie eine beliebige Taste . . .


Was ja so auch nicht ganz richtig sein kann.
Es kommt eine Fehlermedlung und dann wird natürlich auch noch Falsch bewertet.

Also kannst du mir nochmal helfen . Ich hoffe ich habe es jetzt Besser Formatiert.
Mitglied: Biber
Biber 08.05.2009 um 09:37:07 Uhr
Goto Top
Moin mycroftone,

falls Lotpings noch beim Frühstücken ist:

Die Zeile [ set /A "Jahr=%%A,Monat=%%B,Tag=%%C" ] ist natürlich in DIESEM Testschnipsel obsolet und wäre nur sinnvoll in einem Batch, der nach Datumsüberprüfung mit %Jahr%, %Monat%, %Tag% irgendetwas weiterarbeiten soll.

Grüße
Biber
Mitglied: mycroftone
mycroftone 08.05.2009 um 16:24:33 Uhr
Goto Top
Hallo Biber

Besten Dank.

Die Genaue Datumsprüfung von Lostping die du etwas getuned hast funktioniert jetzt wunderbar.
Also danke Lostping und Biber


Jetzt habe ich aber auch noch wie der Titel verrät die Prüfung der Anzahl Zeichen mit eingebaut .

Die funktioniert auch aber leider nur das erste mal und dann wird der Wert immer wieder übernommen.
Also meine Versuche den Wert an anfang auf 0 zu setzten damit der Varaiblenwert dann neu befühlt wird wahren erfolglos
da dann z.b. der Wert gar nicht mehr ermittelt wird.


Also Output bekommen ich dann folgendes




einfache Pruefung auf Laenge


Stringlen [2009-04-29]: 10



genaue Pruefung auf Korrektes Datum



gueltige Datum: 2009-04-29


Drücken Sie eine beliebige Taste . . .





einfache Pruefung auf Laenge


Stringlen [-+2-]: 10



genaue Pruefung auf Korrektes Datum



Ungueltiges Datum: -+2-


Drücken Sie eine beliebige Taste . . .





einfache Pruefung auf Laenge


Stringlen [+edr-5i-##]: 10



genaue Pruefung auf Korrektes Datum



Ungueltiges Datum: +edr-5i-##


Drücken Sie eine beliebige Taste . . .



ende aller Pruefugen

Drücken Sie eine beliebige Taste . . .



Also was läuft hier verquer. könntest du mir hier auch noch helfen.

Besten dank im voraus
Mitglied: bastla
bastla 08.05.2009 um 16:52:00 Uhr
Goto Top
Hallo mycroftone!
Also meine Versuche den Wert an anfang auf 0 zu setzten damit der Varaiblenwert dann neu befühlt wird wahren erfolglos
Damit Du vom Variablenwert wirklich nichts mehr spürst ;-) face-wink, füge als Zeile 21 ein:
Grüße
bastla
Mitglied: 77559
77559 08.05.2009 um 16:53:03 Uhr
Goto Top
Setz mal auf Zeile 21:
Set "myStrLen="

Wenn da noch ein alter Wert drin steht, prüft er in der For /L Schleife gar nicht mehr.
( Das ist übrigens ein guter Grund Sub Routinen mit einem setlocal auszustatten, was aber eine Initialisierung wichtiger Variablen auch nicht ersetzt.)

Gruß
LotPings

Edit: Hallo Bastla, bin nicht so früh aufgestanden und anscheinend immer noch im TRAN-modus.
Mitglied: mycroftone
mycroftone 08.05.2009 um 17:06:49 Uhr
Goto Top
Ja zusammen

Ja danke jetzt funktioniert es ;-(

Ich habe es mit Set myStrLen=0 versucht habe dann aber auch gemerkt das er wegen dem not defined gar nicht mehr in die Schleife geht. Auf die Ide mit dem "myStrLen=" bin ich in dem Moment gar nicht gekommen.


Also nochmal danke an alle beteiligten
Heiß diskutierte Beiträge
general
Liste von URLs in wininet.dllFennek11Vor 1 TagAllgemeinInternet13 Kommentare

Hallo, die Frage ist zugleich enrsthaft und Satire: Windows enthält die Datei "c:\windows\system32\wininet.dll", die für viele Verbindungen ins Internet benötigt wird. Ein Blick in die ...

question
2 Faktor Authentifizierung generell abschaltenratzekahl1Vor 1 TagFrageGoogle Android9 Kommentare

Hallo zusammen, ich habe eine Frage: Kann ich in Google die 2 Faktor Authentifizierzung generell abschalten? Wenn ich ein Gerät als vertrauenswürdig hinzugefügt habe, ja, ...

question
Netzwerk Grafisch darstellen?FireWorldVor 1 TagFrageInternet8 Kommentare

Hallo, ich bin der Zeit auf der Suche nach einem Programm zur Grafischen Darstellung von inbound/outbound eines Servers in einem Rechenzentrum. Hat Jemand eine idee ...

info
Ruhe in Frieden, HackbratenVision2015Vor 1 TagInformationOff Topic5 Kommentare

Der US-Sänger Meat Loaf ist tot. Er starb laut seiner Facebook-Seite in der vergangenen Nacht im Alter von 74 Jahren. Meat Loaf, mit bürgerlichem Namen ...

question
Fritz Repeater 1750E "verloren"reksierpVor 1 TagFrageHardware9 Kommentare

Hallo, ich habe ein 150 Jahre altes Haus (ehemaliger Dorf-Bahnhof), sehr verwinkelt, viele Räume, mit Anbau, 2 Kriech-Dachböden. Vor mehreren Jahren hab ich einige Repeater ...

question
Tablet-Display defekt: wie Zugriff auf DatenMahstarDVor 1 TagFrageGoogle Android6 Kommentare

Guten Abend, ich habe ein Tablet überreicht bekommen mit der Bitte um den Versuch einer Datenrettung. Tablet: Samsung Galaxy Tab-A (2016, SM-T585) Das Display ist ...

info
SonicWall Bootloop seit letzter NachtSt-AndreasVor 1 TagInformationFirewall2 Kommentare

Sonicwall Gen 7 spielen Bootloop seit letzter Nacht. Hilfe dazu hier ...

question
Verständnisproblem SubnettingKarolaVor 18 StundenFrageNetzwerkgrundlagen6 Kommentare

Hallo, möchte mal nerven weil ich keine Antwort finde Ein Netzwerk 172.16.0.0 /16 besteht aus einem alten Router als 4 Port Switch und 4 Clients. ...