1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Batchdatei / Frage zufällig auswählen

Discussion in 'Programmieren' started by Vokabeltrainer, Jan 3, 2016.

Thread Status:
Not open for further replies.
  1. Guten Tag!

    Ich habe (als totaler Laie) für meinen Filius eine Vokabeltrainer-Batchdatei geschrieben, nach diesem Schema:

    :1
    cls
    Echo Was heißt "Tisch" ?
    echo.
    set /p x=
    If /I "%x%"== "Table" goto 2
    set /p x= Das ist Falsch. Neuer Versuch j/n?
    if "%x%"=="j" goto 1
    if "%x%"=="n" goto 2
    :2
    cls
    Echo Was heißt "Apfel" ?

    ...und so fort, bis :30

    Das Programm funktioniert einwandfrei.
    Nun möchte ich, dass das Programm nicht von Frage 1 zu Frage 2 zu Frage 3 usw. geht, sondern die Fragen zufällig auswählt.
    Im Netz habe ich diesen Code für einen Zufallsgenerator gefunden:
    SET /A auswahl=3*%RANDOM%/32767+1
    echo %auswahl%

    Wie muß der Code umgeschrieben werden bzw. lauten, damit die ermittelte Zufallszahl nicht angezeigt, sondern als Befehl gilt, zu diesem Programmabschnitt zu gehen, im Sinne von "Gehe zu : (Zufallszahl)?

    Mir ist klar, dass ich "32767+1" auf die Zahl meiner Programmabschnitte reduzieren muß.
    Alles andere betreffend wäre ich für jeden Tipp dankbar!!
     
  2. kazhar

    kazhar Viertel Gigabyte

    schon wieder eine batchfrage? läuft da ein kurs?

    also prinzipiell würde das die anforderung erfüllen:
    set /A Zufallswert=[Anzahl]*%random%/32768+1
    goto %Zufallswert%

    allerdings kriege ich bauch- und zahnschmerzen von so einem spagetticode.
    man sollte immer versuchen, funktion und daten zu trennen. also nur die logik in der .bat und das wörterbuch in eine andere datei.

    Code:
    @echo off
    setlocal enabledelayedexpansion
    
    set Anzahl=0
    FOR /F "eol=; tokens=1,2" %%i IN (Vokabel.txt) DO (
     set /A Anzahl=!Anzahl!+1
    )
    echo Vokabeltrainer mit gewaltigen %Anzahl% Vokabeln!
    
    :start
    echo.
    set /A lv=%Anzahl%*%random%/32768+1
    FOR /F "eol=; tokens=1,2" %%i IN (Vokabel.txt) DO (
     set /A lv=!lv!-1
     if !lv!.==0. (
      set Deutsch=%%i
      set Englisch=%%j
      goto abfrage
     )
    )
    
    :abfrage
    set /P x=Was heißt "%Deutsch%"? 
    IF /I %x%.==%Englisch%. (
     echo Richtig.
     goto start
    ) ELSE (
     set /P x=Falsch. Neuer Versuch j/n? 
     IF /I !x!.==j. (
      goto abfrage
     ) ELSE (
      echo "%Englisch%" wärs gewesen...
      goto start
     ) 
    )
    
    und dann noch eine datei Vokabel.txt mit den tabulator-getrennten wortpaaren:
    Code:
    Tisch	desk
    Fisch	fish
    Tür	door
    Fenster	window
    Kühlschrank	fridge
    gehen	go
    stehen	stand
    sitzen	sit
    essen	eat
    schreiben	write
    schön	beautiful
    alt	old
    groß	big
    schnell	fast
    klein	small
    ; und so weiter...
    
     
  3. Guten Tag, Kazhar!

    Nein, keine Batch-Kurs-Epidemie, baldige Schulzeugnisse!

    Es ließ sich leider nicht vermeiden, dass mein aus YouTube-Tutorials zusammengeschusteter Code bei manchen Profis Bauchschmerzen verursacht. Und von dem Prinzip, Funktion und Daten getrennt zu halten, habe ich noch nie etwas gesehen oder gehört. Tut mir leid.

    Ich werde nun erstmal den Zufallsgenerator in meinen Code einbauen.
    Dann werde ich mich darüber informieren, was die Befehle aus dem eigentlichen Teil deiner Antwort im Einzelnen bedeuten, um die Funktionsweise nachvollziehen zu können. Denn, und damit verrate ich dir sicher nichts Neues: Die speziellen Befehle sowie die Struktur des Codes als solche, das ist im Moment viel zu hoch für mich.

    Für deine Bemühung und den besseren Code, was weit mehr darstellt als ich mir erhofft hatte,
    bedanke ich mich vielmals!!
     
  4. kazhar

    kazhar Viertel Gigabyte

    nix zu danken, nur eine 10 minuten - fingerübung.

    die meisten befehle kriegt man übrigens im cmd-fenster recht gut erklärt. einfach "help <befehl>" eingeben (also "help if" für die if abfrage, "help for" für die for schleife)

    das einzig etwas speziellere ist die variablen expansion (der part mit "setlocal enabledelayedexpansion" und die rufzeichen statt den prozent um, die variablennamen herum). das kann man aber auch einfach hinnehmen :D
     
Thread Status:
Not open for further replies.

Share This Page