kawooshe
Goto Top

Buchstaben in Zahlen umwandeln

Hallo, ich wollte mal fragen ob man Buchstaben (groß und klein schreibung egal) in ihre dazugehörige zahl umwandeln kann( A=1 B=2 usw.), und wie man es rückgängig macht.
Ich freue mich auf eure antworten.

LG Kawooshe

Content-ID: 295292

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

Ausgedruckt am: 22.11.2024 um 14:11 Uhr

SMoller02
Lösung SMoller02 06.02.2016 aktualisiert um 00:46:18 Uhr
Goto Top
Hallöchen.

Schaue mal nach dem Operator -replace.

Dort kannst du z.B ne txt datei mit Get-Content einlesen und dann mit -replace ersetzen was zu ersetzen möchtest.
Bei mehreren sollte es mit einem Array machbar sein denke ich.

Bin da noch nicht ganz zu weit aber es bringt dich bestimmt schonmal weiter


Mit freundlichen Grüßen
Sebastian
Kawooshe
Kawooshe 06.02.2016 aktualisiert um 00:51:38 Uhr
Goto Top
Danke, klingt logisch, doch das war (glaube ich) nicht das was ich suche. Ich muss einen eingegeben text (in einer variable) in Zahlen umwandeln. Falls du das meintest, war es mein fehler. Aber trotzdem werde ich es am Sonntag ausprobieren und dir dann schreiben ob es geklappt hat.
LG Kawooshe
TsukiSan
TsukiSan 06.02.2016 um 07:21:14 Uhr
Goto Top
Hallo Kawooshe,

in eine VBS-Datei kopiert:
Wscript.Echo ASC("A")  

Ist es das, was du meinst?

Gruß

Tsuki
Kawooshe
Kawooshe 06.02.2016 aktualisiert um 21:21:16 Uhr
Goto Top
Nein, aber das geht schon in die richtung.
So soll es funktionieren:
@echo off
echo Gebe deine zu umwandelnden buchstaben ein
pause >NUL
// eine variable die gesetzt wird, in die die werte der buchstaben eingetragen wird
// Die eingegebenen Buchstaben umwandeln in zahlen
//Die umgewandelten zahlen werden dann noch verschlüsselt, aber das hab ich schon geschafft und ist unwichtig.
114757
Lösung 114757 07.02.2016 aktualisiert um 18:58:26 Uhr
Goto Top
Moin @Kawooshe,
du solltest hier erst mal aufklären was du mit der absolut unklaren Aussage "Zahlen zuordnen" überhaupt genau meinst!
Meinst du damit das die Zahlen einfach dem Alphabet aufsteigend zugeordnet werden sollen ?
A=1
B=2
C=3
..
Z=26

Oder brauchst du den ASCII Wert der Buchstaben ?

Für die erste Variante kannst du das hier nehmen:
@echo off & setlocal ENABLEDELAYEDEXPANSION
REM Zeichen die kodiert werden sollen (das Leerzeichen hat hier den Wert 0)
set "CHARS= abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"  
REM Zeichenfolge abfragen
set /p string=Zeichen eingeben:
REM Länge des Strings ermitteln
call :strLength strLenString "%string%"  
REM Länge der Zeichenliste ermitteln
call :strLength strLenChars "%CHARS%"  
REM von den Längen der Strings für die Schleifen jeweils 1 abziehen
set /a strLenString-=1
set /a strLenChars-=1

echo Kodierung:
REM für jedes Zeichen im String ...
for /L %%a in (0,1,!strLenString!) do (
REM für jedes Zeichen finde den Offset in CHARS und gebe den Offset aus (das Leerzeichen hat hier den Offset 0)
	for /L %%b in (0,1,!strLenChars!) do (
		echo "!string:~%%a,1!"| findstr /c:"!CHARS:~%%b,1!">nul && echo %%b  
	)
)

REM Überspringe Makro und beende Skript
goto :eof

REM Makro zum ermitteln der Länge
:strLength
set "#=%~2"  
set length=0
:stringLengthLoop
if defined # (set #=%#:~1%&set /A length += 1&goto stringLengthLoop)
set "%~1=%length%"  
goto :eof

Wenn es die ASCII Werte der Buchstaben sein sollen hier ein kurzes Powershell-Skript (geht zwar auch mit Batch, aber das können von mir aus andere machen.)
$string = Read-Host "Zeichen eingeben"  
$bytes = [System.Text.Encoding]::ASCII.GetBytes($string)
write-host "Byte Array: $bytes"  
Rückwärts zum umwandeln des Byte-Arrayd in Text geht das dann ebenfalls mit PS so:
($bytes |%{[char]$_}) -join ''  
Gruß jodel32
Biber
Biber 07.02.2016 aktualisiert um 15:58:11 Uhr
Goto Top
Moin jodel32,

Zitat von @114757:


Wenn es die ASCII Werte der Buchstaben sein sollen hier ein kurzes Powershell-Skript (geht zwar auch mit Batch, aber das können von mir aus andere machen.)

Diese Anpassung wäre in deinem Batch-Schnipsel ja minimal.
Du brauchst ja nur die %CHAR%Variable so anpassen, dass das Zeichen "A" auf Pos. 65 und das kleine "a" auf Position 97, also dem jeweiligen ASCII-Wert gefunden wird.
Also sinngemäß
...
SET "CHARS=$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"   
REM ein Dummy-String von 64 Zeichen, damit "A" auf Position 65 gefunden wird  
SET "CHARS=%CHARS%ABCDEFGHIJKLMNOPQRSTUVWXYZ"  
REM das "Z" ist jetzt auf Pos 90, aber "a" soll auf Pos 97.  
REM Deshalb noch mal eine Manipulation mit Dummyzeichen
SET "CHARS=%CHARS%$$$$$$abcdefghijklmnopqrstuvwxyz"  
...


Grüße
Biber
P.S. Für deinen vorbildlich kommentierten Code male ich dir gleich noch eine kleine Sonne unter die Arbeit. face-wink
Oder wie immer das im 21. Jahrhundert gemacht wird...
126919
126919 07.02.2016 aktualisiert um 15:34:10 Uhr
Goto Top
Hi,
@Biber
Alternativ addiert man zur ermittelten Position im String jeweils den fixen Wert zum Offset in ASCII hinzu. Unter Beachtung der unterschiedlich Offsets von Groß- und Kleinbbuchstaben (65..90 und 97..122) natürlich.

fk
Kawooshe
Kawooshe 07.02.2016 um 19:00:22 Uhr
Goto Top
Entschuldigung das ich das etwas undeutlich ausgedrückt habe, bin neu hier. Die erste variante war das was ich gemeint habe. Vielen dank