Top-Themen

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 Anzahl Zeichen einer Variable zählen

Mitglied: mycroftone

mycroftone (Level 1) - Jetzt verbinden

30.04.2009, aktualisiert 10.06.2009, 12614 Aufrufe, 13 Kommentare

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.
Mitglied: LotPings
30.04.2009 um 17:38 Uhr
Hallo,

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

01.
::Befehl.cmd 
02.
@echo off&setlocal 
03.
set "Datum=%1" 
04.
for /F "tokens=1-3 delims=-" %%A in ("%Datum%") Do set /A "Jahr=%%A,Monat=%%B,Tag=%%C" 
05.
If Defined Jahr  if %Jahr%  GEQ 1980 if %Jahr%  LEQ 2100^ 
06.
if Defined Monat if %Monat% GEQ 1    if %Monat% LEQ 12^ 
07.
if Defined Tag   if %Tag%   GEQ 1    if %Tag%   LEQ 31 goto :weiter 
08.
echo Ungültiges Datum: %Datum% 
09.
goto :eof 
10.
:weiter
Only braintested

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

Gruß
LotPings

Edit: Übersichtlicher formatiert
Bitte warten ..
Mitglied: mycroftone
30.04.2009 um 17:49 Uhr
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
Bitte warten ..
Mitglied: Biber
30.04.2009 um 17:56 Uhr
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:
01.
>set testdate=-~-2,2- 
02.
>if "%testdate:~7,3%"=="" echo leer 
03.
leer 
04.
>if "%testdate:~6,3%"=="" echo leer
Wenn Du also vorrangig diese fehlerhaften 7stelligen Datums-Werte abfangen willst--> prüfe es so.

Grüße
Biber
Bitte warten ..
Mitglied: Biber
30.04.2009 um 18:11 Uhr
... 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
01.
@echo off & setlocal EnableDelayedExpansion 
02.
 
03.
:: Pessimistisch: der String könnte ja 100 Zeichen lang sein 
04.
set "WorstCaseLen=100" 
05.
set "DerTestString=irgendein Text" 
06.
 
07.
For /L %%i in (%WorstCaseLen%,-1,1) do ( 
08.
      if not defined myStrLen if "!DerTestString:~%%i,1!" NEQ "" Set /a myStrLen=1+%%i 
09.
10.
echo Stringlen [%DerTestString%]: %myStrLen%
--Auch nicht getestet--

Grüße
Biber
Bitte warten ..
Mitglied: LotPings
30.04.2009 um 18:21 Uhr
Zitat von mycroftone:
Kann mir Trotzdem jemand sagen wie ich die Zeichen in einer Zeile Zähle
01.
::CharCount.cmd 
02.
@echo off 
03.
set "Zeile=was auch immer du willst" 
04.
call :len CharCount "%Zeile%" 
05.
echo %CharCount% Zeichn in "%Zeile%" 
06.
echo (ohne Anführungszeichen) 
07.
goto :eof 
08.
:len RetVal(byRef) Value(Byval) 
09.
setlocal 
10.
set cnt=0 
11.
set "chk=%~2" 
12.
:len_loop 
13.
if not "%chk%"=="" Set /A cnt+=1 & set "chk=%chk:~1%" & goto :len_loop 
14.
endlocal&set /A "%1=%cnt%"&goto :eof
HTH
Bitte warten ..
Mitglied: mycroftone
06.05.2009 um 19:12 Uhr
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.
Bitte warten ..
Mitglied: LotPings
06.05.2009 um 19:38 Uhr
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
< code> und
< /code> markiert wird (dann ohne Leerzeichen hinter dem < )

Gruß
LotPings
Bitte warten ..
Mitglied: mycroftone
08.05.2009 um 00:22 Uhr
Hallo LotPings

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

Habe jetzt folgende Batchdatei

01.
  
02.
@echo off & setlocal EnableDelayedExpansion 
03.
 
04.
Call :Check_Datum 2009-04-29 
05.
Call :Check_Datum -~-2,2- 
06.
 
07.
exit 
08.
 
09.
:Check_Datum 
10.
 
11.
set "Datum=%1" 
12.
echo. 
13.
echo Teste 
14.
echo. 
15.
for /F "tokens=1-3 delims=-" %%A in ("%Datum%") Do set /A "Jahr=%%A,Monat=%%B,Tag=%%C" 
16.
If Defined Jahr if %Jahr% GEQ 1980 if %Jahr% LEQ 2100 if Defined Monat if %Monat% GEQ 1 if %Monat% LEQ 12 if Defined Tag if %Tag% GEQ 1 if %Tag% LEQ 31 goto :weiter  
17.
 
18.
echo. 
19.
echo Ungueltiges Datum: %Datum%  
20.
echo. 
21.
echo. 
22.
pause 
23.
 
24.
:EOF 
25.
 
26.
:weiter 
27.
echo. 
28.
echo gueltige Datum: %Datum% 
29.
echo. 
30.
echo. 
31.
pause 
32.
:EOF

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.
Bitte warten ..
Mitglied: Biber
08.05.2009 um 09:37 Uhr
Moin mycroftone,

falls Lotpings noch beim Frühstücken ist:
01.
@echo off & setlocal EnableDelayedExpansion 
02.
 
03.
Call :Check_Datum 2009-04-29 
04.
Call :Check_Datum -~-2,2- 
05.
goto :eof 
06.
:: ~~~ hier ist Ende Vom Batch 
07.
 
08.
:Check_Datum 
09.
 
10.
set "Datum=%1" 
11.
echo. 
12.
echo Teste 
13.
echo. 
14.
for /F "tokens=1-3 delims=-" %%A in ("%Datum%") Do ( 
15.
   if "%%C" NEQ "" IF "%%B" NEQ "" ( 
16.
   if %%A GEQ 1980 if %%A LEQ 2100 ( 
17.
     if %%B GEQ 1 if %%B LEQ 12 ( 
18.
       if %%C GEQ 1 if %%C LEQ 31 ( 
19.
           set /A "Jahr=%%A,Monat=%%B,Tag=%%C" 
20.
           goto :weiter  
21.
))))) 
22.
echo. 
23.
echo Ungueltiges Datum: %Datum%  
24.
echo. 
25.
echo. 
26.
pause 
27.
 
28.
goto :EOF 
29.
:: ~~~ hier ist Ende von Sub :CheckDatum --GOBACK 
30.
 
31.
:weiter 
32.
echo. 
33.
echo gueltige Datum: %Datum% 
34.
echo. 
35.
echo. 
36.
pause 
37.
:: ~~~ hier ist Ende der BatchDATEI..hier ist Feierabend
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
Bitte warten ..
Mitglied: mycroftone
08.05.2009 um 16:24 Uhr
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.

01.
  
02.
@echo off & setlocal EnableDelayedExpansion  
03.
Call :Check_Datum 2009-04-29  
04.
Call :Check_Datum -+2- 
05.
Call :Check_Datum +edr-5i-##  
06.
 
07.
echo. 
08.
echo. 
09.
echo. 
10.
echo ende aller Pruefugen 
11.
echo. 
12.
pause 
13.
 
14.
:: ~~~ hier ist Ende der BatchDATEI..hier ist Feierabend 
15.
exit  
16.
 
17.
 
18.
:: ~~~ hier ist Ende Vom Batch  
19.
:Check_Datum  
20.
set "Datum=%1"  
21.
 
22.
 
23.
echo.  
24.
echo. 
25.
echo. 
26.
echo. 
27.
echo ============= 
28.
echo. 
29.
echo  einfache Pruefung auf Laenge 
30.
echo.  
31.
echo. 
32.
 
33.
set "WorstCaseLen=100"  
34.
For /L %%i in (%WorstCaseLen%,-1,1) do (  
35.
    if not defined myStrLen if "!Datum:~%%i,1!" NEQ "" Set /a myStrLen=1+%%i  
36.
)  
37.
 
38.
echo Stringlen [%Datum%]: %myStrLen% 
39.
 
40.
if %myStrLen% NEQ 10 goto datum-ungueltig 
41.
 
42.
echo. 
43.
echo. 
44.
echo ============= 
45.
echo. 
46.
echo  genaue Pruefung auf Korrektes Datum 
47.
echo.  
48.
echo. 
49.
 
50.
for /F "tokens=1-3 delims=-" %%A in ("%Datum%") Do (  
51.
   if "%%C" NEQ "" IF "%%B" NEQ "" (  
52.
   if %%A GEQ 1980 if %%A LEQ 2100 (  
53.
     if %%B GEQ 1 if %%B LEQ 12 (  
54.
       if %%C GEQ 1 if %%C LEQ 31 (  
55.
         goto :datum-gueltig   
56.
)))))  
57.
 
58.
:datum-ungueltig  
59.
 
60.
echo.  
61.
echo Ungueltiges Datum: %Datum%   
62.
echo.  
63.
echo.  
64.
 
65.
pause  
66.
goto :EOF  
67.
:: ~~~ hier ist Ende von Sub :CheckDatum --GOBACK  
68.
 
69.
:datum-gueltig  
70.
 
71.
echo.  
72.
echo gueltige Datum: %Datum%  
73.
echo.  
74.
echo.  
75.
 
76.
pause  
77.
goto :EOF  
78.
:: ~~~ hier ist Ende von Sub :CheckDatum --GOBACK 
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
Bitte warten ..
Mitglied: bastla
08.05.2009 um 16:52 Uhr
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 , füge als Zeile 21 ein:
set "myStrLen="
Grüße
bastla
Bitte warten ..
Mitglied: LotPings
08.05.2009 um 16:53 Uhr
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.
Bitte warten ..
Mitglied: mycroftone
08.05.2009 um 17:06 Uhr
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
Bitte warten ..
Ähnliche Inhalte
Datenbanken

SQL-Abfrage - Anzahl der Wechsel zählen

gelöst Frage von Cire48Datenbanken15 Kommentare

Hallo zusammen, lässt sich folgendes mit einem SQL-Select umsetzen? Gegeben sei eine Tabelle xyz mit der Spalte 1: Ich ...

Batch & Shell

Batch Variable auf 5 Zeichen begrenzen

gelöst Frage von PinkFLuffyUnicornBatch & Shell5 Kommentare

Hallo zusammen, ich habe folgendes Problem: ich habe ein kleines Batch Programm, welches eine Benutzereingabe erfordert. der Benutzer soll ...

Microsoft Office

Excel Formeln - Zählen der Anzahl eindeutiger Zellwerte mit einer Nebenbedingung

gelöst Frage von Booster07Microsoft Office4 Kommentare

Hallo zusammen, ich habe gerade folgendes Problem, bei dem ich selbst leider nicht weiterkomme. Ich möchte die Anzahl eindeutiger ...

VB for Applications

In einer Textzeile (String) die Anzahl eines vorgekommenen Buchstaben zählen

gelöst Frage von windelterroristVB for Applications5 Kommentare

Hallo! Ich bin noch neu im Bereich VBA und bin mir deshalb noch etwas unsicher in dieser Programmiersprache. Würde ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 5 StundenWindows 103 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 8 StundenAdministrator.de Feedback10 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 1 TagHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 1 TagGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Server-Hardware
Welche Rolle spielt Design bei Enterprise IT Hardware?
Frage von ApolloXServer-Hardware17 Kommentare

Ich arbeite für einen internationalen Elektronikhersteller in der Forschung und meine Aufgabe ist es, Feedback von Nutzern in Hinsicht ...

Windows Netzwerk
WSUS4 und Windows 10 Updates automatisch installieren
Frage von sammy65Windows Netzwerk15 Kommentare

Hallo miteinander, ich habe mit einen neuen WSUS Server aufgesetzt Server 2016 darauf einen aktuellen WSUS. Grund, wir stellen ...

Speicherkarten
Vergessliche USB-Sticks?
Frage von hanheikSpeicherkarten14 Kommentare

Ich habe in den letzten Tagen 500 USB-Sticks mit Bilddateien bespielt. Obwohl ich die Dateien mit größter Sorgfalt kopiert ...

Switche und Hubs
Cisco SG350X-48 AdminIP in anderes VLAN
Frage von lcer00Switche und Hubs14 Kommentare

Hallo zusammen, ich habe ein Problem mir einem Cisco SG350X-48 bei der Erstinstallation wurde eine IP 192.168.0.254 (Default VLAN ...