pinkfluffyunicorn
Goto Top

Per Batch Den Buchstaben in einer Variable herausfinden und ihr einen speziellen Code zuweisen

for /f "usebackq" %%a in (./Letter1.txt) do set Letter1=%%a  

damit lese ich aus einer Textdatei ein Buchstaben aus, das Script soll dann den Buchstaben in der Variable durch den Passenden Code aus dieser Tabelle ersetzen und dies dann in die erste Zeile einer Textdatei Schreiben. Dann soll es sich den 2. Buchstaben aus der Textdatei raussuchen und das selbe machen, den Code dann in die 2. Zeile schreiben. da die Textdatei mit den Buchstaben nur 5 Buchstaben enthält muss das natürlich auch nur 5x durchlaufen. hier mal die Tabelle, hab den namen davon vergessen aber wenigstens hab ich den Inhalt :D

die Tabelle:

00011 A
11001 B
01110 C
01001 D
00001 E
01101 F
11010 G
10100 H
00110 I
01011 J
01111 K
10010 L
11100 M
01100 N
11000 O
10110 P
10111 Q
01010 R
00101 S
10000 T
00111 U
11110 V
10011 W
11101 X
10101 Y
10001 Z

Könnt ihr mir da weiterhelfen?

Content-ID: 305925

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

Ausgedruckt am: 26.11.2024 um 16:11 Uhr

129413
129413 01.06.2016 aktualisiert um 18:37:28 Uhr
Goto Top
Und in der Textdatei stehen die 5 Buchstaben jeweils in einer eigenen Zeile, oder alle in einer hintereinander ??
Falls sie untereinander stehen
@echo off
for /f "tokens=1" %%a in (.\Letters.txt) do @(  
	>>".\newfile.txt" (for /f "tokens=1" %%b in ('type .\tabelle.txt ^| findstr /i "%%a"') do echo %%b)  
)
Gruß skybird
PinkFLuffyUnicorn
PinkFLuffyUnicorn 01.06.2016 um 18:35:54 Uhr
Goto Top
hintereinander wie bei hallo. wo muss ich dann die tabelle einfügen das das script diese benutzen kann?
129413
129413 01.06.2016 aktualisiert um 18:39:19 Uhr
Goto Top
Zitat von @PinkFLuffyUnicorn:
wo muss ich dann die tabelle einfügen das das script diese benutzen kann?
In eine Textdatei tabelle.txt einfügen.

Oberes ist aber für untereinander, für nebeneinander musst du entweder die Länge entweder vorher kennen oder sie eben erst per Skript ermitteln.
PinkFLuffyUnicorn
PinkFLuffyUnicorn 01.06.2016 um 18:53:02 Uhr
Goto Top
Die länge sind ja immer 5 buchstaben. Aber ich kanns auch untereinander einspeichern lassen ist ja auch keine kunst via zeilenvorschub
rubberman
rubberman 01.06.2016 um 18:53:20 Uhr
Goto Top
Oder so
@echo off &setlocal

for %%i in (
"00011 A"  
"11001 B"  
"01110 C"  
"01001 D"  
"00001 E"  
"01101 F"  
"11010 G"  
"10100 H"  
"00110 I"  
"01011 J"  
"01111 K"  
"10010 L"  
"11100 M"  
"01100 N"  
"11000 O"  
"10110 P"  
"10111 Q"  
"01010 R"  
"00101 S"  
"10000 T"  
"00111 U"  
"11110 V"  
"10011 W"  
"11101 X"  
"10101 Y"  
"10001 Z"  
) do for /f "tokens=1*" %%j in (%%i) do set "char%%k=%%j"  

<"letter1.txt" set /p "line="  

setlocal EnableDelayedExpansion
>"newfile.txt" (  
  for /f  %%i in ('cmd /u /von /c "echo !line!"^|find /v ""') do echo !char%%i!  
)
Grüße
rubberman
129413
Lösung 129413 01.06.2016 aktualisiert um 20:51:48 Uhr
Goto Top
Und noch eine Variante, wenn sie in einer Zeile stehen
@echo off & setlocal enabledelayedexpansion

set /p zeile=<".\Letters.txt"  

REM Länge der Variablen ermitteln
call :strLength strLen "%zeile%"  
set /a strLen-=1

>".\newfile.txt"  (for /L %%a in (0 1 !strLen!) do (  
  if "!zeile:~%%a,1!" NEQ " " (  
  	for /f "tokens=1" %%b in ('type ".\tabelle.txt" ^| findstr /i "!zeile:~%%a,1!" 2^>nul') do echo %%b  
  ) else ( echo. )
))

goto :eof

REM Makro zum ermitteln der Länge einer Variablen
:strLength
set "#=%~2"  
set length=0
:stringLengthLoop
if defined # (set #=%#:~1%&set /A length += 1&goto stringLengthLoop)
set "%~1=%length%"  
goto :eof
Inhalt der .\Letters.txt:
Hallo das ist ein Test
Inhalt von .\tabelle.txt
00011 A
11001 B
01110 C
01001 D
00001 E
01101 F
11010 G
10100 H
00110 I
01011 J
01111 K
10010 L
11100 M
01100 N
11000 O
10110 P
10111 Q
01010 R
00101 S
10000 T
00111 U
11110 V
10011 W
11101 X
10101 Y
10001 Z
Ausgabe nach ausführen des Skripts in .\newfile.txt:
10100
00011
10010
10010
11000

01001
00011
00101

00110
00101
10000

00001
00110
01100

10000
00001
00101
10000
PinkFLuffyUnicorn
PinkFLuffyUnicorn 01.06.2016 um 19:20:03 Uhr
Goto Top
ist da dann auch nur der zahlencode drinn oder auch die leertaste oder die buchstaben? kann grade nicht testen bin am handy
rubberman
rubberman 01.06.2016 aktualisiert um 20:13:15 Uhr
Goto Top
Was ist wo drin? Auf was beziehst du dich mit deiner Frage?
bin am handy
Dann solltest du vielleicht antworten, wenn du auch getestet hast.
PinkFLuffyUnicorn
PinkFLuffyUnicorn 01.06.2016 um 22:13:08 Uhr
Goto Top
ich meinte ob in der variable in der dann nachehr der Zahlencode von dem Buchstaben abgespeichert wird, nur den Code enthält oder auch die Leertaste und den Buchstaben , also die komplette Zeile wenn du verstehst
rubberman
rubberman 01.06.2016 um 23:21:36 Uhr
Goto Top
Da die Ausgabe von Leerzeichen und Buchstabe nicht in deinen Anforderungen stand, nein. Weißt du aber sicherlich bereits, nachdem du getestet hast.
PinkFLuffyUnicorn
PinkFLuffyUnicorn 02.06.2016 um 10:35:59 Uhr
Goto Top
nein, du warst schneller mit schreiben wie mein zug im Heimfahren. aber habs getestet ist super, danke :D
PinkFLuffyUnicorn
PinkFLuffyUnicorn 02.06.2016 um 12:41:45 Uhr
Goto Top
gotot eof, wo ist eof? find ich nicht, auch nicht mit suchfunktion... funktioniert aber echt super
129413
129413 02.06.2016 aktualisiert um 12:59:04 Uhr
Goto Top
Zitat von @PinkFLuffyUnicorn:
gotot eof, wo ist eof? find ich nicht, auch nicht mit suchfunktion...
:eof = End of File

Nach einem call einer subroutine springt eof aber nur zurück zum Ausgangspunkt des call-Aufrufs. In meinem Skript war :strLength die "Subroutine". Ansonsten springt eof ans Ende des Skripts.
PinkFLuffyUnicorn
PinkFLuffyUnicorn 02.06.2016 um 12:56:23 Uhr
Goto Top
immer diese abkürzungen... :D
PinkFLuffyUnicorn
PinkFLuffyUnicorn 04.06.2016 um 18:53:49 Uhr
Goto Top
wenn ich es jetzt zurücksetzen will, also aus dem Binärcode wieder buchstaben machen will, was muss ich dann in dem script ändern?
129413
129413 04.06.2016, aktualisiert am 05.06.2016 um 21:59:30 Uhr
Goto Top
Zitat von @PinkFLuffyUnicorn:

wenn ich es jetzt zurücksetzen will, also aus dem Binärcode wieder buchstaben machen will, was muss ich dann in dem script ändern?
Das ganze rückwärts, also mit einer FOR-Scheife über alle Zeilen der Datei mit den Binärcodes gehen, und in dieser Schleife mit einer weiteren per findstr stattdessen das zweite Token aus der Tabelle nehmen...

Etwa so:
@echo off & setlocal enabledelayedexpansion
set ergebnis=
for /f "tokens=1,2 delims=:" %%a in ('findstr /rn "^" ".\newfile.txt"') DO (  
  if "%%b" NEQ "" (  
  	for /f "tokens=2" %%c in ('findstr /ic:"%%b" ".\tabelle.txt" 2^>nul') do set "ergebnis=!ergebnis!%%c"  
  ) else (
        set "ergebnis=!ergebnis! "  
  )
)
echo !ergebnis!
pause

p.s. Deine Shift-Taste ist kaputt.
PinkFLuffyUnicorn
PinkFLuffyUnicorn 05.06.2016 um 00:01:26 Uhr
Goto Top
Das lustige, sie ist wirklich, Wackelkontakt:D
129413
129413 05.06.2016 aktualisiert um 08:47:01 Uhr
Goto Top
Jetzt hat sie zusätzlich auch noch eine Insuffizienz von unregelmäßigen Verben face-big-smile.
PinkFLuffyUnicorn
PinkFLuffyUnicorn 05.06.2016 um 20:56:05 Uhr
Goto Top
ok da weiss ich nich was es heisst, Aber seit ich deutschprüfung rum hab schleifen eh ich lasse. :D
PinkFLuffyUnicorn
PinkFLuffyUnicorn 05.06.2016 um 21:06:36 Uhr
Goto Top
Waru bekomme ich das als ausgang? hab nur ein 2pause" am ende hinzugefügt um den output zu sehen, und bei "@echo off" ein f weggenommen damit ich auch sehen kann was die Konsole so macht. aber warum kommt nur das dabei raus und die datei newfile.txt ändert sich nicht?
unbenannt-1
129413
129413 05.06.2016 aktualisiert um 22:01:12 Uhr
Goto Top
Weil mein Skript das nur auf der Konsole ausgibt deswegen :-P

Mensch, kauf die mal ein paar Buchstaben Batch ...

Zum auskommentieren macht man nicht einfach einen Buchstaben weg sondern setzte ein REM vor die Zeile aber dann entfernst du das Delayedexpansion und das wird in diesem Skript benötigt.

Wenn du nicht weist was du tust lass es, Skript geht hier problemlos, und wie gesagt: Der Inhalt wird im Beispiel einfach nur für dich auf der Konsole angezeigt !!
Setz im obigen Skript einfach eine Pause am Ende dann siehst du es wenn du das Skript per Doppelklick öffnest.
PinkFLuffyUnicorn
PinkFLuffyUnicorn 06.06.2016 um 10:02:50 Uhr
Goto Top
ich weis das ich mit REM auskommentiere aber dann hätte ich ja enabledelayexpansion auch auskommentiert und da war es einfacher nen Buchstaben wegzunehmen wenn du verstehst wie ich das meine. aber da dann das Echo ja schon das "of" ausgibt hat es wahrscheinlich Probleme mit dem delayexpansion gegeben da es ja in der gleichen Zeile steht... beim versuch nur mit pause hat es aber auch nicht funktioniert. ich kenne mich mit Strings leider nicht so aus, deswegen stell ich mich grade auch so blöd an ^^
und wie du im obigen Screenshot siehst gibt es ja nichts in der Konsole aus, die Variable !ergebnis! leer bleibt. sry das ich mich grade minimal dumm anstelle, versuche aber wenigstens jetzt halbwegs auf meine Rechtschreibung zu achten :D
129413
129413 06.06.2016 aktualisiert um 10:07:53 Uhr
Goto Top
in der "newfile.txt" sollten die binären Codes untereinander stehen, diese wird eingelesen.

Geht hier einwandfrei, my lord, you are making a mistake ....

Ich bin jetzt raus, ist alles geklärt.

ciao
PinkFLuffyUnicorn
PinkFLuffyUnicorn 06.06.2016 um 10:46:01 Uhr
Goto Top
mh mal weiter suchen...
129413
129413 06.06.2016 aktualisiert um 10:47:57 Uhr
Goto Top
PinkFLuffyUnicorn
PinkFLuffyUnicorn 08.06.2016 um 12:59:13 Uhr
Goto Top
nein, suchen warums bei dir geht und bei mir nicht
129413
129413 08.06.2016 um 13:05:04 Uhr
Goto Top
screenshot