Einfache Dechiffrierung Decryptung von Buchstaben per Batch
Hallo
ich habe ein Problem und weiß nicht wie ich es am besten angehen soll.
Wie das gemeint ist, kann man auf der Seite www.signifikant.de.to sehen.
Hallo
ich bin kein besonderst guter Coder und denke meist zu Kompliziert und würde erst mal alle Variablen mit set setzen um dann mit For jeden Buchstaben einzeln auslesen darum Bitte ich euch um mit Hilfe.
Also ich möchte ein Wort oder ein ganzen Text auf die Numerologie nach Pythagoras und der des Alphasystems Prüfen und wenn möglich die Worte in eine extra Text Datei Kopieren.
ich habe ein Problem und weiß nicht wie ich es am besten angehen soll.
Wie das gemeint ist, kann man auf der Seite www.signifikant.de.to sehen.
Hallo
ich bin kein besonderst guter Coder und denke meist zu Kompliziert und würde erst mal alle Variablen mit set setzen um dann mit For jeden Buchstaben einzeln auslesen darum Bitte ich euch um mit Hilfe.
Also ich möchte ein Wort oder ein ganzen Text auf die Numerologie nach Pythagoras und der des Alphasystems Prüfen und wenn möglich die Worte in eine extra Text Datei Kopieren.
:restart
echo ***********************************************************
echo ***********[1] für Numerologie nach Pythagoras ***********
echo ***********[2] für Numerologie nach Alphasystem ***********
echo ***********************************************************
set /p Auswahl=Wort Prüfen nach:
if Auswahl=1 goto one
else
goto Fehler
if Auswahl=2 goto two
else
goto Fehler
:one
echo Numerologie nach Pythagoras
set /p wort=Gib hier das Wort ein:
echo %wort% > Wort.txt
set A=1, B=2, C=3, D=4, E=5, F=6, G=7, H=8, I=9,
J=1, K=2, L=3, M=4, N=5, O=6, P=7, Q=8, R=9,
S=1, T=2, U=3, V=4, W=5, X=6, Y=7, Z=8
if %wort%=62 echo Nach der Numerologie nach Pythagoras ergibt das Wort: %wort% = 62pt
else
goto Falsch
:two
echo Numerologie nach Alphasystem
set /p wort=Gib hier das Wort ein:
set A=1, B=2, C=3, D=4, E=5, F=6, G=7, H=8, I=9, J=10, K=11, L=12, M=13, N=14, O=15, P=16, Q=17, R=18,
S=19, T=20, U=21, V=22, W=23, X=24, Y=25, Z=26
if %wort%=43 echo Nach der Numerologie nach dem Alphasystem ergibt das Wort: %wort% = 43
else
goto Falsch
echo ende
Exit
:Fehler
echo Gib eine Zahl 1 oder 2 !!!
goto restart
:Falsch
echo Leider kein Treffer versuchs mit einem anderem Wort!
goto restart
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 167468
Url: https://administrator.de/contentid/167468
Ausgedruckt am: 22.11.2024 um 22:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo Vierus,
also Dein Pseudocode da oben hätte außer Fehlermeldungen werfen garnichts gemacht...
Aber naja, dafür verdanken wir Dir bzw. dieser Numerologischen Webseite die Erkenntnis, dass sich Deep Thought verrechnet hat und die Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest nicht 42 sondern 43 ist.
Die Idee, ein Esoterisches Script zu schreiben, fand ich so skurril, dass ich es glatt gemacht habe.
Here we go!
Viel Spass beim Wörterbuch berechnen
Friemler
[EDIT]
Komisch,
[/EDIT]
also Dein Pseudocode da oben hätte außer Fehlermeldungen werfen garnichts gemacht...
Aber naja, dafür verdanken wir Dir bzw. dieser Numerologischen Webseite die Erkenntnis, dass sich Deep Thought verrechnet hat und die Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest nicht 42 sondern 43 ist.
Die Idee, ein Esoterisches Script zu schreiben, fand ich so skurril, dass ich es glatt gemacht habe.
Here we go!
@echo off
setlocal
set "Letters=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
:Restart
cls
echo ***********************************************************
echo ***********[1] für Numerologie nach Pythagoras ***********
echo ***********[2] für Numerologie nach Alphasystem ***********
echo ***********[E] für Ende ***********
echo ***********************************************************
echo.
set "Choice="
set /p "Choice=Wort prüfen nach: "
echo.
if "%Choice%" equ "1" goto :Pythagoras
if "%Choice%" equ "2" goto :Alphasystem
if /i "%Choice%" equ "E" exit /b
goto :ErrInput
:Pythagoras
set "NumericTable=1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8"
echo Numerologie nach Pythagoras
goto :InputWord
:Alphasystem
set "NumericTable=1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26"
echo Numerologie nach Alphasystem
:InputWord
set "Word="
set /p "Word=Gib ein Wort ein: "
echo.
set "TheWord=%Word%"
if "%TheWord%" equ "" goto :Restart
set /a Result=0
:CalcLoop
set "Char=%Word:~0,1%"
set "Word=%Word:~1%"
if "%Char%" equ " " goto :CalcLoopEnd
set /a Cntr=1
for %%c in (%Letters%) do (
if /i "%Char%" equ "%%c" goto :FoundChar
set /a Cntr+=1
)
goto :ErrUnknownChar
:FoundChar
for /f "tokens=%Cntr%" %%v in ("%NumericTable%") do set /a Result+=%%v
:CalcLoopEnd
if "%Word%" neq "" goto :CalcLoop
:Output
if "%Choice%" equ "1" (
if "%Result%" equ "62" (
echo Nach der Numerologie nach Pythagoras ergibt das Wort %TheWord% %Result%
) else (
goto :NoMatch
)
)
if "%Choice%" equ "2" (
if "%Result%" equ "43" (
echo Nach der Numerologie nach dem Alphasystem ergibt das Wort %TheWord% %Result%
) else (
goto :NoMatch
)
)
pause
goto :Restart
:ErrInput
echo Gib die Zahl 1 oder 2 ein!!!
pause
goto Restart
:ErrUnknownChar
echo Du hast ein unbekanntes Zeichen eingegeben! Nur Die Buchstaben von A bis Z sind erlaubt.
pause
goto :Restart
:NoMatch
echo Leider kein Treffer, versuche es mit einem anderen Wort!
pause
goto Restart
Viel Spass beim Wörterbuch berechnen
Friemler
[EDIT]
Komisch,
Teufel
und Liebe
ergeben beide nach Pythagoras den Wert 24... Ich werde mich nie mehr verlieben! [/EDIT]
Zitat von @Vierus:
"goto :CalcLoopEnd"
Wohin führt das den oder geht man so einfach nur an das ende von :CalcLoop
Obacht geben, länger leben! "goto :CalcLoopEnd"
Wohin führt das den oder geht man so einfach nur an das ende von :CalcLoop
echo %Word% >> "Text.txt"
[EDIT] Sorry, jetzt weiß ich was Du meinst, Wörter aus einer Textdatei einlesen. Dann nimm
for /f "usebackq delims=" %%w in ("Text.txt") do (
set "Word=%%w"
.
. hier das Wort dann verarbeiten und an verzögerte Variablenerweiterung denken.
.
)
[/EDIT]
Friemler
Hallo Vierus,
wenn Du mit
Du hast zwei Möglichkeiten:
1. Du schreibst
Wenn die Wörter Leerzeichen enthalten können sollen, muss es
2. Du lässt die Anführungszeichen um
Gruß
Friemler
wenn Du mit
FOR /F
eine Datei einlesen willst, deren Name/Pfad Leerzeichen enthält, musst Du den Namen in Anführungszeichen setzen können. Deshalb hat sich MS (oder der Praktikant, der das FOR
-Parsing programmiert hat) die Option USEBACKQ
einfallen lassen. Das fehlt bei Dir, deshalb wird "test.txt"
als Zeichenkette aufgefasst, die Du mit FOR /F
zerlegen willst.Du hast zwei Möglichkeiten:
1. Du schreibst
if "%Counter%" neq "0" (
set ForOptions="usebackq skip=%Counter%"
) else (
set ForOptions="usebackq"
)
for /f %ForOptions% %%w in ("test.txt") do (
set "Word=%%w"
set "TheWord=%%w"
call :ProcessWord
)
exit /b
:ProcessWord
set /a Result=0
:CalcLoop
.
. Hier kommt dann der Code zur Berechnung aus meinem ursprünglichen Script
.
set ForOptions="usebackq skip=%Counter% delims="
bzw. set ForOptions="usebackq delims="
heißen. Das Unterprogramm wird aufgerufen, um Probleme mit der zu frühen Erweiterung von Variablen zu umgehen bzw. um auf die verzögerte Variablenerweiterung verzichten zu können. Steht alles im Tutorial.2. Du lässt die Anführungszeichen um
test.txt
weg. Das geht aber nur, wenn Pfad und Dateiname keine Leerzeichen enthalten, sonst wird das ganze als Liste von Dateinamen, die durch Leerzeichen getrennt sind, aufgefasst. Ohne usebackq
kann man den Dateipfad nicht in Anführungszeichen setzen, da er sonst eben als Zeichenkette aufgefasst wird.Gruß
Friemler
Hallo Vierus,
wenn Du
Die Option
Dass mit
sollte eigentlich funktionieren. Wenn nicht, liegt Dein Fehler an anderer Stelle. Führe als ersten Befehl in
In Deiner Schleife hast Du noch
Wenn in der Textdatei wirklich
<code type"plain">
das allsehende Auge = 62 pt
steht, bekommst Du wegen dem Gleichheitszeichen und den Ziffern Probleme, dafür gibt es ja keinen Zahlencode.
Aber eigentlich bin ich kein Wiederkäuer, die stehen bei Bauer Paul im Stall. Alles was ich Dir in diesem und dem letzten Posting gesagt habe, steht in meinem Tutorial. Ich habe das Teil geschrieben, um genau dieses ewige Wiederholen von Antworten auf immer gleiche Fragen zu vermeiden, das nervt mich. Lies das Tutorial!!
Gruß
Friemler
wenn Du
delims=
schreibst, also festlegst, dass kein Zeichen als Trennzeichen gelten soll, ist die Option tokens=
sinnfrei. Wenn es keine Trennzeichen gibt, gibt es auch nur ein Token und das wird sowieso verarbeitet.Die Option
eol=
gibt (ein) Zeichen an, bei deren/dessen Auftauchen in den Eingabedaten die Verarbeitung abgebrochen wird. Standardmäßig ist das das Semikolon. Wenn Du keine Semikolons in den Eingabedaten hast, kannst Du eol
also vergessen.Dass mit
skip=x
x Zeilen vom Anfang der Datei übersprungen werden, weißt Du ja wohl...if "%Counter%" neq "0" (
set ForOptions="usebackq skip=%Counter% delims="
) else (
set ForOptions="usebackq delims="
)
for /f %ForOptions% %%w in ("test.txt") do (
set "Word=%%w"
set "TheWord=%%w"
call :ProcessWord
)
ProcessWord
doch mal echo %Word%
aus.In Deiner Schleife hast Du noch
set /a Counter+=1
stehen. Das macht keinen Sinn, falls Du damit die Anzahl der Zeilen, die übersprungen werden sollen, verändern willst. Die Veränderung von Counter
wird in den ForOptions
aus zwei Gründen nicht berücksichtigt. Herauszufinden, welche das sind, überlasse ich Dir.Wenn in der Textdatei wirklich
<code type"plain">
das allsehende Auge = 62 pt
steht, bekommst Du wegen dem Gleichheitszeichen und den Ziffern Probleme, dafür gibt es ja keinen Zahlencode.
Aber eigentlich bin ich kein Wiederkäuer, die stehen bei Bauer Paul im Stall. Alles was ich Dir in diesem und dem letzten Posting gesagt habe, steht in meinem Tutorial. Ich habe das Teil geschrieben, um genau dieses ewige Wiederholen von Antworten auf immer gleiche Fragen zu vermeiden, das nervt mich. Lies das Tutorial!!
Gruß
Friemler
Hallo Vierus,
OK, dass sind zumindest teilweise Fragen, die erstens nicht im Tutorial beantwortet werden und zweitens auch nicht aufwändig zu beantworten sind und drittens hast Du Dich schon bemüht.
Zunächst mal: Ich beziehe micht hierbei auf diesen Kommentar von Dir.
Der Counter ist sinnlos, weil
Ab hier beziehe ich mich auf mein ursprüngliches Script.
Der Algorithmus ist ungefähr so:
Die Schleife läuft also so lange, bis alle Buchstaben des Wortes in
Gruß
Friemler
OK, dass sind zumindest teilweise Fragen, die erstens nicht im Tutorial beantwortet werden und zweitens auch nicht aufwändig zu beantworten sind und drittens hast Du Dich schon bemüht.
Zunächst mal: Ich beziehe micht hierbei auf diesen Kommentar von Dir.
Der Counter ist sinnlos, weil
- der Wert von
%Counter%
schon in Zeile 2 in die Variable%ForOptions%
eingetragen wird, danach steht in%ForOptions%
nur noch ein Zahlenwert. - selbst, wenn Du die Variable
%ForOptions%
garnicht verwenden würdest und"usebackq DELIMS= tokens=1-3 skip=%Counter%"
direkt in den Kopf derFOR
-Schleife schreiben würdest, würde dieser Schleifen-Kopf nur einmal übersetzt und anstatt von%Counter%
der dann aktuelle Wert dieser Variablen dort eingetragen. Spätere Änderungen, die innerhalb der Schleife durchset /a Counter+=1
vorgenommen werden, wären wirkungslos. Und ja, dieser Befehl verändert wirklich den Inhalt von%Counter%
innerhalb der Schleife, obwohl keine verzögerte Variablenerweiterung aktiviert ist. Benutzen kann man diesen Wert innerhalb der Schleife aber wiederum nur, wenn die verzögerte Variablenerweiterung eingeschaltet ist. Diese Logik versteht nur der Praktikant, der die Shell programmiert hat.
Ab hier beziehe ich mich auf mein ursprüngliches Script.
Set "Char=%Word:~0,1%"
weist das erste Zeichen der Variablen Word
an die Variable Char
zu. Mit Set "Word=%Word:~1%"
wird von Word
das erste Zeichen abgeschnitten. Deshalb brauche ich zum Ausgeben des Wortes bei der Auswertung in Zeile 74 (Pythagoras) bzw. 82 (Alphasystem) meines Scripts eine Kopie von Word
, die Variable TheWord
. Siehe auch SET /?
. Der Algorithmus ist ungefähr so:
- Lese den ersten Buchstaben des Wortes in eine Variable (
Char
) ein. (Zeile 51) - Schneide den ersten Buchstaben vom Wort ab. (Zeile 52)
- Wenn das ermittelte Zeichen ein Leerzeichen ist, springe zu Schritt 7, ans Schleifenende. (Zeile 54)
- Suche den ermittelten Buchstaben in der Liste der zugelassenen Buchstaben (
%Letters%
). Gehe Buchstabe für Buchstabe durch diese Liste und zähle für jeden Buchstaben einen Zähler (%Cntr%
) hoch. Wenn der ermittelte Buchstabe gleich dem aktuell betrachteten aus der Liste ist, springe nach Schritt 6, LabelFoundChar
. (Zeilen 56 bis 61) - Wenn das ermittelte Zeichen nicht in der Liste gefunden wurde, wird Zeile 63 ausgeführt, der Sprung zur Ausgabe einer Fehlermeldung und nachfolgendem Neustart des Programms.
- Nimm den Zähler, der in der Suchschleife hochgezählt wurde, und benutze ihn als Index in die Liste der numerischen Werte (
%NumericTable%
) und ermittele so den numerischen Wert des Buchstabens. Addiere diesen Wert auf den Wert von%Result%
. (Zeile 66) - Wenn die Variable
Word
noch Zeichen enthält, springe nach Schritt 1. (Zeile 67)
Die Schleife läuft also so lange, bis alle Buchstaben des Wortes in
%Word%
betrachtet wurden und dabei kein ungültiges Zeichen gefunden wurde.Gruß
Friemler