bm-magic
Goto Top

Wie setzt man VOL als SET ein?

Hallo, ich bin 76 Jahre "jung", habe von Basic keine Ahnung, möchte aber meine (funktionierende) NB.BAT automatisieren.
Mein OS ist DOS.
Habe zwei Primäre Partitionen und möchte beim Booten die "richtige" anzeigen und u.U. wechseln.
Um mein Problem richtig zu beschreiben, der Ist-zustand:
a. In der Autoexec.bat:
- @PATH D:\NB;
- @SET NB=P1 und P2 je nach Partition
- @CALL D:\NB\NB
b. Auf Laufwerk D:\NB\ sind:
1. NB.BAT mit dem Inhalt:
@echo off
IF %NB%==P1 GOTO PAR_1
IF %NB%==P2 GOTO PAR_2
IF NOT EXIST %NB% GOTO FEHLER
:PAR_1
COPY D:\NB\NB4.TXT D:\NB\NB.TXT
GOTO WEITER
:PAR_2
COPY D:\NB\NB5.TXT D:\NB\NB.TXT
GOTO WEITER
:FEHLER
ECHO SET NB gibt es nicht!
:WEITER
@BE D:\NB\NB.txt
rem ------- Eingabe auwerten -------
IF ERRORLEVEL 2 GOTO ENDE
IF ERRORLEVEL 1 GOTO NB
GOTO ENDE
:NB
ECHO           N (N)euboot
CALL D:\NB\PQBOOT.EXE
GOTO ENDE
:ENDE
DEL D:\NB\NB.TXT
ECHO           W (W)eiter                                      
2. Eine NB1.TXT Datei mit dem Inhalt:
SA /CLS
WINDOW 1,08,12,65 LEUCHTEND GELB AUF BLAU EXPLODE
ROWCOL 02,20 "*** ICH BIN EIN ERSATZ PRA-PC ***"  
ROWCOL 04,24 "Nun bist Du gerade dabei die"  
ROWCOL 05,27 "PART. 1 zu starten."  
ROWCOL 07,24 "Wenn es die richtige Linie ist,"  
ROWCOL 08,24 "truecke die Taste >W<."  
ROWCOL 10,24 "Die PART. 2 kannst du starten,"  
ROWCOL 11,24 "nach dem Druck auf Taste >N<."  
WINDOW 14,15,16,57 LEUCHTEND WEISS AUF MAGENTA
ROWCOL 15,17
ASK "Deine Wahl: W [W]eiter oder N [N]euboot " NW DEFAULT=W  
ROWCOL 17,0
SA /CLS
ROWCOL 1,0
3. Eine NB2.TXT Datei mit dem gleichen Inhalt (nur die PART. Zahlen sind vertauscht.)
4. Eine PQBOOT.EXE (Das ist ein Powerquest Programm, der je nach Vorwahl neu bootet.

Meine Idee:
a. Auf den Befehl SET in der autoexec.bat zu verzichten und ihm in der NB.BAT einzusetzen.
Dazu den Befehl VOl > vol.txt verwenden. Aber NUR den Teil mit dem Nummer im Namen.
Denn die Ausgabe sieht z.B. so aus:
Datentr„ger in Laufwerk C ist LIN_1      
 Datentr„gernummer: 3640-17F7
b. Möglichst mit nur eine NB.TXT arbeiten und im Text "nur" die Zahlen zu wechseln.

Hat jemand eine Lösung für mich?

Content-ID: 2125519844

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

Ausgedruckt am: 25.11.2024 um 08:11 Uhr

MirkoKR
MirkoKR 11.03.2022 aktualisiert um 20:06:10 Uhr
Goto Top
Hi.
Finde dich STARK.

DOS erinnert mich an Ambitionen mit autoexec.bat und config.sys Befehlen die Ausbeute an RAM zu maximieren ...

... > 25 Jahre vor heute.

Ich fürchte, das du mit deiner Partitions-Boot-Steuerung, wie du sie realisiert hast, uns allen etwas voraus hast - auf DOS-Ebene.

Wir steuern Multi-Boot - wie du sicher weisst -heute mit Tools die anders vorgehen...

Aber, wenn ich dich richtig cerstanden habe, möchtest du beim Booten die Wahl zwischen 2 DOS Partitionen - beide primare Partitionen haben...

Nur, was du "automatisieren möchtest, verstehe ich nicht - liegt aber sicher an meiner eingeschränkten modernen Erfahrung ...

.
bm-magic
bm-magic 11.03.2022 um 21:54:33 Uhr
Goto Top
@MirkoKR, danke für Deine Meldung und gleichzeitig tut es mir leid, das ich meine Frage nicht eindeutig beschrieben habe.
Also noch einmal:
Die Wahl funktioniert schon. (Seit eben schon ~20 Jahren face-wink ) Das macht die PQBOOT.EXE.
Aber eben..."Wen es dem Esel zu gut geht, geht es auf Eis."
- Meine Lösung ist zu "einfach" und ich ein möchte noch ein "bisschen" dazu lernen.
Dazu zählt, der Inhalt von eine *.txt Datei (von "außen", eben "automatisch" zu verändern).

- Mein Problem sind gleich zwei Dateien die ich korrigieren möchte:
1. Die [vol.txt] Datei, (dort möchte ich NUR das Zeichen 1 oder 2) behalten und es als Variable
im SET verwenden.
2. Die [NB.TXT] Datei. in der möchte ich:
a. in der Zeile 5 das Zeichen nach "PART." mit dem aktuellem Inhalt von SET ersetzen,
b. in der Zeile 8 das Zeichen nach "PART" (je nach Größen Vergleich inkrementieren/dekrementieren.
Leider fehlen mir dazu die Kenntnisse.
Ist es nun eindeutiger?
73234
73234 11.03.2022 aktualisiert um 22:46:41 Uhr
Goto Top
N'Abend,

das mit der Auswahl von Partitionen habe ich auch immer integriert, nutze es unter Win7 sogar noch, nur:

Ich habe immer ein Programm genutzt was folgendes gemacht hat:

Partition1 -Aktiv
Partition2 -Versteckt
--> Partition 1 wurde gestartet

Partition2 -Aktiv
Partition1 -Versteckt
--> Partition 2 wurde gestartet

Es war immer nur die aktive Partition sichtbar.
Die Auswahl war bei jedem Start Sicht- und Auswählbar, ohne überhaupt mit Dateien zu arbeiten.
Autoexec.bat und Config.sys mussten natürlich auf jeder Partition vorhanden sein

Ich könnte Dir mehr Infos zu diesem Programm zusenden, wenn Du willst.

Die Wirkungsweise von PQBOOT.EXE kenne ich leider nicht.

Den Bootmanager den ich hier unter Win7/64 nutze ist Boot US
Es ist aber nicht der, den ich damals unter DOS/WIN eingesetzt habe, arbeitet aber ähnlich, aber wird unter DOS konfiguriert.

Schönes WE - Minion
ricardobohner
ricardobohner 11.03.2022 um 23:24:59 Uhr
Goto Top
@bm-magic um die Seriennummer vom commando vol in eine variable zu bekommen könntest du so etwas nutzen:


for /f "skip=1 delims=" %%a in ('vol') do set SerienNummer=%%a
set SerienNummer=%SerienNummer:~-9%
echo %SerienNummer%

Oder

for /f "tokens=2 skip=1 delims=: " %%a in ('vol') do set SerienNummer=%%a
echo %SerienNummer%
bm-magic
bm-magic 12.03.2022 um 05:21:44 Uhr
Goto Top
@ricardobohner, danke sehr. Deine beiden Anweisungen funktionieren sehr gut
aus Windows, aber nicht im DOS.
- Bei dem ersten Versuch bekomme ich nach jedem Abschnitt die Meldung:
"Befehl oder Dateiname..."
- bei dem zweiten Versuch ist die erste Antwort: "Syntaxfehler"
die zweite "Befehl oder Dateiname..." face-sad
bm-magic
bm-magic 12.03.2022 um 13:56:56 Uhr
Goto Top
@73234, danke für Dein Angebot, habe mich gefreut, aber ich suche keine
neue "Baustelle", ich möchte nur meine "renovieren".
- Aber Dein Angebot war sehr nett und ich danke Dir dafür.
- Aber u.U. kannst Du mir trotzdem helfen.
ricardobohner< schickte zwei Vorschläge. Leider verstehe ich "kein Wort" davon.
- Kann man es irgendwie aufschlüsseln?
- Oder anders gefragt. kann ich meinen Kommando-Interpreter fragen, welche
Anweisungen er versteht und eine Hilfe zu diesen bekommen?
73234
73234 12.03.2022 aktualisiert um 14:48:58 Uhr
Goto Top
Hallo,
um die Seriennummer aus Bsp1/Obere auszulesen versuch mal das:

for /f "skip=1 delims=;" %a in ('vol') do set SNr=%a  
set SerienNummer=%SNr:~-9%
echo %SerienNummer%

<Enter>

Die letzten 9 Ziffern werden ausgegeben.

Danke @ricardobohner für den Denkanstoss :>)

Viel Spass

PS Unter Win7/64 cmd ... :>((
ricardobohner
ricardobohner 12.03.2022 um 14:41:49 Uhr
Goto Top
Hallo Leute,

Ich hab mal hier nachgekuckt wo man ein dos system online simulieren kann:
https://www.pcjs.org/software/pcx86/sys/dos/microsoft/6.22/

Und tatsächlich funcktioniert der for loop dort anders als im Windows hab da mal ein for /? commando eingegeben um die hilfe des commandos zu bekommen und der hat anscheinend keine for /f option... Das muss irgendwann mal später im Windows eingeführt worden sein... leider weiss ich so auch nicht wie man nur die Seriennummer speichern kann...
bm-magic
bm-magic 12.03.2022 um 16:08:57 Uhr
Goto Top
@73234 & @ricardoboner, Dank an euch beiden.
Aber falls ich widersprechen darf...ich wollte eigentlich nicht die Seriennummer.
Ich möchte, aus der ver.txt Datei das letzte Zeichen von dem Label haben,
also die 1 oder 2 um es als SET zu verwenden.
Habe keine Ahnung ob es überhaupt mit BAT möglich ist!
- Aber ich bin mir ziemlich sicher, das es mit BAS möglich (wenn man es kann) geht.
- Aus euren Antworten habe ich verstanden, das hier um die Anweisung <for> und
seine Optionen geht.
- Was <skip und delims> bewirken sollen muss ich noch erfahren. Danke
bm-magic
bm-magic 13.03.2022 aktualisiert um 00:46:43 Uhr
Goto Top
"mühsam ernährt sich das Einhörnchen", aber ich mache "winzige" Erfolge.
Habe eine Anleitung gefunden, um Zeichen zu ersetzen.
Hier das Original:
setlocal enableDelayedExpansion
for /F "tokens=*" %%L in (datei.txt) do (  
    set "line=%%L"  
    set "line=!line:suchString=ersetzString!"  
    echo.!line!
)
>>"%TMP%\tmpOutput[%~n0].txt"  
del "datei.txt"  
copy "%TMP%\tmpOutput[%~n0].txt" "datei.txt"  
und habe es für mein Problem umgebaut:
setlocal enableDelayedExpansion
for /F "tokens=*" %%L in (vol.txt) do (  
    set "line=%%L"  
    set "line=!line:Win_7=DOS_1!"  
    echo.!line!
)
>>"%TMP%\tmpOutput[%~n0].txt"  
del "datei.txt"  
copy "%TMP%\tmpOutput[%~n0].txt" "vol.txt"  
Die Antwort sieht so aus:
F:\Neu>volneu
F:\Neu>setlocal enableDelayedExpansion
F:\Neu>for /F "tokens=*" %L in (vol.txt) do (  
set "line=%L"  
 set "line=!line:Win_7=DOS_1!"  
 echo.!line!
)
F:\Neu>(
set "line=Datenträger in Laufwerk C: ist Win_7"  
 set "line=!line:Win_7=DOS_1!"  
 echo.!line!
)
Datenträger in Laufwerk C: ist DOS_1
F:\Neu>(
set "line=Volumeseriennummer: 9AAC-306B"  
 set "line=!line:Win_7=DOS_1!"  
 echo.!line!
)
Volumeseriennummer: 9AAC-306B
Syntaxfehler.
F:\Neu>>>"C:\Temp\tmpOutput[volneu].txt"  
F:\Neu>
Was habe ich falsch gemacht?
PS. Der Inhalt von vol.txt steht am Anfang des Artikel.
rubberman
rubberman 13.03.2022 um 17:03:01 Uhr
Goto Top
Du vermischst die "neue" Batch Syntax der cmd.exe (seit Windows NT) mit der Syntax der command.com (DOS). So etwas wie enableDelayedExpansion oder Substrings in Variablen hast du schlichtweg nicht zur Verfügung. Auch Option /F für FOR Schleifen gibt es nicht unter DOS. Du wirst also nicht ohne Hilfe von BASIC auskommen. Es ist aber ~30 Jahre her, dass ich mich das letzte mal mit so etwas befasst habe. In meinem gesamten Umfeld gibt es auch keine Chance mehr irgendwo auf einem DOS System zu testen.

Steffen
rubberman
rubberman 14.03.2022 um 16:40:14 Uhr
Goto Top
Ich hab mal kurz Google gequält. Prüf mal bitte ob du die gewünschten Ausgaben bekommst. Heißt, einmal sollte N1 1 und N2 2 sein und einmal sollte N1 2 und N2 1 sein.
@ECHO OFF

REM Ausgabe von VOL in Datei umleiten
VOL>C:\VOL.TXT

REM Datei NUM.BAS schreiben.
ECHO ' Textdatei oeffnen>C:\NUM.BAS  
ECHO OPEN "C:\VOL.TXT" FOR INPUT AS #1>>C:\NUM.BAS  
ECHO ' erste Zeile lesen>>C:\NUM.BAS  
ECHO LINE INPUT #1, ln$>>C:\NUM.BAS
ECHO ' Textdatei schliessen>>C:\NUM.BAS  
ECHO CLOSE #1>>C:\NUM.BAS
ECHO ' letztes Zeichen der ersten Zeile in numerischen Wert konvertieren>>C:\NUM.BAS  
ECHO n%% = VAL(RIGHT$(ln$, 1))>>C:\NUM.BAS
ECHO ' Wert als Errorlevel zurueckgeben>>C:\NUM.BAS  
ECHO SYSTEM n%%>>C:\NUM.BAS

REM Nummern vordefinieren
SET N1=1&SET N2=2
REM QBasic Code ausfuehren
QBASIC /RUN C:\NUM.BAS
REM Wenn der Errorlevel-Wert >= 2 ist, dann Nummern neu definieren.
IF ERRORLEVEL 2 SET N1=2&SET N2=1

ECHO N1 %N1%
ECHO N2 %N2%
PAUSE
Die Laufwerksbuchstaben musst du sicher noch anpassen ...

Das Script schreibt eine NUM.BAS Datei mit folgendem Inhalt und ruft diese auf:
' Textdatei oeffnen  
OPEN "C:\VOL.TXT" FOR INPUT AS #1  
' erste Zeile lesen  
LINE INPUT #1, ln$
' Textdatei schliessen  
CLOSE #1
' letztes Zeichen der ersten Zeile in numerischen Wert konvertieren  
n% = VAL(RIGHT$(ln$, 1))
' Wert als Errorlevel zurueckgeben  
SYSTEM n%
Was ich nicht weiß, ist, ob SYSTEM n% tatsächlich einen Errorlevelwert setzt. Quellen im Netz widersprechen sich und es scheint abhängig von der QBasic version zu sein. Frag ggf. noch mal in einem QBasic Forum, was da notwendig wäre.

Wie auch immer, wenn das funktioniert, hast du schon mal die beiden Werte mit denen du die NB.TXT neu schreiben kannst.

Steffen
bm-magic
bm-magic 24.03.2022 um 14:48:05 Uhr
Goto Top
@rubberman (Hallo Steffen), vielen Dank für Deine Hilfe. Ich war einige Tage ohne Internet,
nun habe ich Deine Lösung versucht...aber kam damit nicht zu recht.
Sicher mache ich etwas falsch, leider sehe ich mein Fehler nicht.
- Habe die Pfade aktualisiert, sonst aber Dein Script als laufw.bas übernommen.
Beim Aufruf Öffnet sich Qbasic Fenster in der Zeile 20 also nach
SET N1=1&SET N2=2

mit dem Aufruf:
<Erwartet: Anweisung>
und ich kann damit nichts anfangen.
Sonst sehe ich keine Änderung.

Hast Du eine Idee?
rubberman
rubberman 24.03.2022 um 14:59:40 Uhr
Goto Top
Da kommt halt die QBASIC Syntax ins Spiel, wo ich auch nicht mehr viel weiß. Aber wenn du mir verrätst welche Version von QBASIC du installiert hast, werfe ich Google noch mal an um mehr Informationen zu bekommen. Falls es Version 4.5 ist, ließe sich das meiner Meinung nach noch ein bisschen besser lösen.

Steffen
bm-magic
bm-magic 24.03.2022 um 16:41:08 Uhr
Goto Top
@steffen, DANKE... habe gerade verzweifelt gesucht face-wink
Ich habe MS-DOS QBasic Version 1.1. Also die Standart Version von MS DOS 6.2. (1987-1992).

Bohu
PS Bin geb. Tscheche, lebe seit 1969 in Bad Kissingen.
Der Vorname ist Abkürzung von Bohuslav, und bedeutet übersetzt Gothold
rubberman
rubberman 24.03.2022 um 17:31:54 Uhr
Goto Top
Hallo Bohu,

Dann haben wir ungefähr dieselbe Entfernung zu deiner alten Heimat (Gotha, Thüringen) face-smile

Ver. 1.1 macht es jetzt leider nicht einfacher. Soweit ich herausfinden konnte, ist es da noch nicht möglich gewesen, einen Rückgabewert zu setzen. Derzeitige Idee:
  • Batch erzeugt VER.TXT
  • QBasic liest VER.TXT und löscht VER.TXT falls 2 das letzte Zeichen der ersten Zeile ist.
  • Batch prüft Vorhandensein von VER.TXT und definiert Variablen ggf. neu.

Bevor ich da ran gehe, noch ein paar Fragen:
  1. Ich habe mir deinen Inhalt von VER.TXT oben noch mal genauer angesehen. e Die erste Zeile endet dort nicht mit 1 sondern mit einer Reihe Leerzeichen. Ist das wirklich so?
  2. Bin über deinen Thread im QBasic Forum gestolpert https://forum.qbasic.at/viewtopic.php?t=9133&sid=4ec79a2e76c1685ea12 ... Dort endet die erste Zeile auf PART_1 statt LIN_1. Was ist richtig?
  3. Kannst du bitte noch mal genau sagen, wo (Laufwerk) sich die einzelnen Dateien bei dir befinden?
Der Grund warum ich das alles frage, ist, dass ich einen Blindflug machen muss. Kann kaum etwas von dem testen was ich schreibe, darum ist mein Beitrag zur Lösung nur so gut wie die Information die du gibst.

Steffen
rubberman
rubberman 24.03.2022, aktualisiert am 25.03.2022 um 14:42:29 Uhr
Goto Top
Hier meine vorläufige Umsetzung:
@ECHO OFF
SET VOLDAT=VOL.TXT
SET SEARCH=LIN_
SET SCRIPT=LAUFW.BAS

REM Ausgabe von VOL in Datei umleiten
VOL C:>%VOLDAT%

REM ggf. QBasic Code erzeugen
REM   IF NOT EXIST %SCRIPT% GOTO CREATE
REM QBasic Code immer neu erzeugen, solange wir testen
GOTO CREATE
:ENDCREATE

REM QBasic ausfuehren
QBASIC /RUN %SCRIPT%
REM Erstellte Textdatei suchen und Nummer definieren.
IF EXIST N1 GOTO N1
IF EXIST N2 GOTO N2
IF EXIST N3 GOTO N3
IF EXIST N4 GOTO N4
IF EXIST N5 GOTO N5
IF EXIST N6 GOTO N6
IF EXIST N7 GOTO N7
IF EXIST N8 GOTO N8
IF EXIST N9 GOTO N9
ECHO Nummer nicht gefunden.
PAUSE
GOTO EOF

:ERR
DEL N%NX%
ECHO LIN_%NX% existiert nicht.
PAUSE
GOTO EOF

:FOUND
DEL N%NX%
ECHO NX %NX%
ECHO NY %NY%

PAUSE
GOTO EOF

REM ~~~~~~~~~~~~~~~ Subroutinen ~~~~~~~~~~~~~~~
REM Datei LAUFW.BAS schreiben.
:CREATE
ECHO ' Suchzeichenfolge vor der Nummer in der Textdatei>%SCRIPT%  
ECHO s$ = "%SEARCH%">>%SCRIPT%  
ECHO ' Textdatei oeffnen>>%SCRIPT%  
ECHO OPEN "%VOLDAT%" FOR INPUT AS #1>>%SCRIPT%  
ECHO ' erste Zeile lesen>>%SCRIPT%  
ECHO LINE INPUT #1, ln$>>%SCRIPT%
ECHO ' zweite Zeile lesen>>%SCRIPT%  
ECHO LINE INPUT #1, ln$>>%SCRIPT%
ECHO ' Textdatei schliessen>>%SCRIPT%  
ECHO CLOSE #1>>%SCRIPT%
ECHO ' Zahl nach der Suchzeichenfolge extrahieren>>%SCRIPT%  
ECHO n$ = MID$(ln$, INSTR(ln$, s$) + LEN(s$), 1)>>%SCRIPT%
ECHO ' Datei mit lediglich N und der Zahl als Dateiname erzeugen>>%SCRIPT%  
ECHO n$ = "N" + n$>>%SCRIPT%  
ECHO OPEN n$ FOR OUTPUT AS #1>>%SCRIPT%
ECHO CLOSE #1>>%SCRIPT%
ECHO ' Script beenden>>%SCRIPT%  
ECHO SYSTEM>>%SCRIPT%
GOTO ENDCREATE

REM Variable N definieren, abhaengig von der gefundenen Datei
:N1
SET NX=1
GOTO ERR

:N2
SET NX=2
GOTO ERR

:N3
SET NX=3
GOTO ERR

:N4
SET NX=4
SET NY=5
GOTO FOUND

:N5
SET NX=5
SET NY=4
GOTO FOUND

:N6
SET NX=6
GOTO ERR

:N7
SET NX=7
GOTO ERR

:N8
SET NX=8
GOTO ERR

:N9
SET NX=9
GOTO ERR

REM ~~~~~~~~~~~~~~~ Ende ~~~~~~~~~~~~~~~
:EOF
Die 3 Variablen am Anfang ggf. anpassen. Insbesondere SEARCH noch mal ansehen, die die Suchzeichenfolge vor der Nummer in VOL.TXT beinhaltet.

Steffen
bm-magic
bm-magic 24.03.2022 um 20:30:57 Uhr
Goto Top
Hallo Steffen, ich bin Dir unglaublich dankbar...und...Du bist für mich "viel" zu schnell.
- Ich war gerade dabei Deine Fragen zu prüfen und nun ist schon Deine Antwort da.
1. VER.TXT. Du hast sicher Recht. Ich habe ein Bild gemacht.
Die Datei hat insgesamt 4 Zeilen.
Die erste Zeile und die Letzte Zeile sind leer. Siehe dos_1.jpg

2. Der Name der Partitionen habe ich auch fotografiert. Siehe dos_2.jpg
3. Die Dateien sind auf einer logischen Partition D:\NB\

Und für Sicherheit noch mein letzten Entwurf:

@ECHO OFF
REM Ausgabe von VOL in Datei umleiten
REM VOL C: >D:\Work\VOL.TXT

REM Datei NUM.BAS schreiben.
ECHO ' Textdatei oeffnen>D:\Work\NUM.BAS  
ECHO OPEN "D:\Work\VOL.TXT" FOR INPUT AS #1>>D:\Work\NUM.BAS  
ECHO ' erste Zeile lesen>>D:\Work\NUM.BAS  
ECHO LINE INPUT #1, ln$>>D:\Work\NUM.BAS
ECHO ' Textdatei schliessen>>D:\Work\NUM.BAS  
ECHO CLOSE #1>>D:\Work\NUM.BAS
ECHO ' letztes Zeichen der ersten Zeile in numerischen Wert konvertieren>>D:\Work\NUM.BAS  
ECHO n%% = VAL(RIGHT$(ln$, 1))>>D:\Work\NUM.BAS
ECHO ' Wert als Errorlevel zurueckgeben>>D:\Work\NUM.BAS  
ECHO SYSTEM n%%>>D:\Work\NUM.BAS

REM Nummern vordefinieren
SET N1=1&SET N2=2
REM QBasic Code ausfuehren
QBASIC /RUN D:\Work\NUM.BAS
REM Wenn der Errorlevel-Wert >= 2 ist, dann Nummern neu definieren.
IF ERRORLEVEL 2 SET N1=2&SET N2=1

ECHO N1 %N1%
ECHO N2 %N2%
PAUSE
rem Die Laufwerksbuchstaben musst du sicher noch anpassen ...
REM Das Script schreibt eine NUM.BAS Datei mit folgendem Inhalt und ruft diese auf:
REM' Textdatei oeffnen  
OPEN "D:\Work\VOL.TXT" FOR INPUT AS #1  
REM ' erste Zeile lesen  
LINE INPUT #1, ln$
REM ' Textdatei schliessen  
CLOSE #1
REM ' letztes Zeichen der ersten Zeile in numerischen Wert konvertieren  
n% = VAL(RIGHT$(ln$, 1))
REM ' Wert als Errorlevel zurueckgeben  
SYSTEM n%

Ich habe dort NUR die Pfade korrigiert.
Ist aber nun schon "Geschichte".

Ich werde nun Dein "neues" Vorschlag testen und werde Dich informieren.
PS Es dauert ein bisschen, weil ich mit dem PC über Diskette kommuniziere. face-wink
dos_2
dos_1
rubberman
rubberman 24.03.2022 um 20:42:19 Uhr
Goto Top
Oh, warte ... Details sind wichtig!
  1. Wenn es die 2. Zeile in der Textdatei ist, dann muss QBasic auch 2 Zeilen lesen, sonst kann das Script die Zahl niemals finden! Ich ändere das oben gleich.
  2. Das Basic Script prüft auf 2 am Ende. Jetzt sehe ich LIN_4. Was soll ich damit machen?
bm-magic
bm-magic 24.03.2022 um 22:40:15 Uhr
Goto Top
Hallo Steffen,
es tut mir leid, das es Probleme macht. Kann man nicht z.B. auf LIN_4 und LIN_5 prüfen und
der gefundenen Wert einsetzen?
- Ich habe versucht es zu testen, aber es tut sich nichts.
- Wie merke ich, ob QBasic etwas tut?
Zur Zeit sehe ich lediglich
Erwartet: Anweisung

Danke noch einmal

Bohu
rubberman
rubberman 24.03.2022 um 23:01:03 Uhr
Goto Top
Hallo Bohu

Kann man nicht z.B. auf LIN_4 und LIN_5 prüfen
Natürlich kann man das. Aber hättest du die Screenshots nicht angehängt, wäre ich niemals auf die Idee gekommen, dass es so etwas wie LIN_4 und LIN_5 überhaupt gibt. Computer sind doof. Man muss ihnen exakt sagen was sie tun sollen. Und dazu musst du unbedingt exakte Angaben machen auf die ich mich beziehen kann, sonst sind wir in einem halben Jahr noch keinen Schritt weiter.

Ich ändere jetzt oben den Code noch mal. Lass den mal laufen, ohne dass du Laufwerk und Pfad hinzufügst. Dann findet zwar erst mal alles im Arbeitsverzeichnis der Batchdatei statt, aber das ist zum Testen gut genug. Vielleicht ist dann auch die Fehlermeldung weg. Falls ja, dann ist sicher noch irgendwo ein expliziter Laufwerkswechsel im Script nötig.

Steffen
bm-magic
bm-magic 24.03.2022 um 23:48:07 Uhr
Goto Top
Hallo Steffen,
schläfst Du auch "irgendwann"?
"Ein Bild sagt mehr als 1000 Worte".
Und mir reicht es für Heute.

Eine GUTE Nacht.

Bohu
qbasic
rubberman
rubberman 25.03.2022 aktualisiert um 00:38:10 Uhr
Goto Top
Hallo Bohu

schläfst Du auch "irgendwann"?
Das frage ich mich selbst auch manchmal.

"Ein Bild sagt mehr als 1000 Worte".
Oh, ich glaube damit hast du Recht.
Wenn ich den Titel im Editor richtig deute, hast du den Code als LAUFW2.BAS gespeichert. NEIN! Das ist Batchcode (Endung .BAT)! face-smile

Der Batchcode erzeugt die .BAS Datei und ruft auch QBasic mit der .BAS Datei auf. Darum sollst du dich nicht kümmern müssen.

Ich hab den Code oben abermals aktualisiert. Nun solltest du exakt die Nummer nach LIN_ ausgegeben bekommen. Hoffentlich face-wink

Eine GUTE Nacht.
Das wünsche ich dir auch. Neuer Tag, neues Glück.

Steffen
bm-magic
bm-magic 25.03.2022, aktualisiert am 21.04.2022 um 17:25:46 Uhr
Goto Top
Hallo Steffen,

"wer lesen kann, ist im Vorteil..."
- Ich kann es leider nicht. Zu minderst nicht bis zum Ende.
Als ich Deine Nachricht sah, habe ich die Endung korrigiert und noch einmal getestet.
- Zu erst sah es so aus, wie wenn sich nichts tut.
- Als ich mir die Datei ansah, war alles in eine Zeile geschrieben.
Nach der Korrektur tat sich viel.
Ich habe ein Foto gemacht (bat_2.jpg) und als ich es senden wollte, sah ich Dein letzter Satz das Du den Code aktualisiert hast.

bat_2

- Also noch ein Test und Foto (bat_3.jpg).
Info: Wie schon bei dem ersten Versuch, tat sich scheinbar nichts. Bis auf eine neue Datei mit dem Namen
REM ohne Endung mit folgendem Inhalt:

OFF
SET VOLDAT=VOL.TXT
SET SEARCH=LIN_
SET SCRIPT=LAUFW.BAS

REM Ausgabe von VOL in Datei umleiten
VOL C: ggf. QBasi

Als ich den Text wieder Zeilenweise sortiert habe, tat sich mehr.
Auf dem Bildschirm steht keine Nr. gefunden aber
in dem Ordner ist eine neue Datei mit dem Namen 4 (meine aktuelle Partition) ohne Endung. face-wink))
und wenn ich die Partition wechsle erscheint zusätzlich 5.
UND ich dachte...das ich der Zauberer bin...? (War ich auch. Vor 50 Jahren.)

bat_3

DANKE UND BIS ZUM MORGEN

Bohu
rubberman
rubberman 25.03.2022 aktualisiert um 12:45:14 Uhr
Goto Top
Hallo Bohu,

darüber, wer keinen Schlaf findet, müssen wir jetzt aber nicht mehr reden face-wink

Hatte bis zur Mittagspause noch andere Dinge zu erledigen, aber jetzt kann ich dir antworten ...

Die gute Nachricht ist, dass das BASIC Script tut was es soll und auch das Batch Script schon fast das tut was es soll. Irgendwie scheint da aber noch ein Fehler drin zu sein. Kopier es einfach noch mal neu. Wichtig ist, dass du die erzeugten Dateien "4" und/oder "5" händisch löscht, bevor du neu testest. Das sollte das Batch Script eigentlich automatisch erledigen. Ansonsten wird immer die Datei mit der kleinsten Nummer zuerst gefunden, auch wenn BASIC eine Datei mit einer höheren Nummer erzeugt hat. Wenn alles funktioniert, solltest du eine Ausgabe, wie N 4 oder N 5 als letzte Ausgabe bekommen. Falls nicht, müssen wir auf Ursachenforschung gehen.

Steffen

EDIT: Wie ich gerade nachgelesen habe, gab es das & als Kommandoverknüpfung unter DOS wohl noch nicht. Also habe ich das Script noch mal angepasst, in der Hoffnung, dass Klammerblöcke unterstützt werden.

EDIT 2: Ich hab's mir noch mal überlegt. Wir gehen lieber den umständlichen aber sicheren Weg über Subroutinen.
bm-magic
bm-magic 25.03.2022 um 13:53:03 Uhr
Goto Top
Hallo Steffen,

habe mit beiden Partitionen getestet:
Beim ersten Test die neue REM Datei mit dem gleichen Text.
- Nach dem bereinigen, also in der Zeile jeweils AscII Nr. 8 als Beginn für neue Zeile und löschen,
funktioniert die *.bat ohne Fehler.
a. Auf dem Bildschirm erscheint "N Leer 1" (immer) und "eine bel. Taste drücken".
b. Im Ordner wird eine leere Datei mit dem RICHTIGEM Zahl der Partition als Namen gebildet.
c. Als SET sind neu:
VOLDAT=VOL:TXT
SEARCH=LIN_
SCRIPT=LAUFW:BAS
N=1
Ich hoffe, das ich nichts übergeshen habe.

Bohu
rubberman
rubberman 25.03.2022 aktualisiert um 14:06:36 Uhr
Goto Top
Hallo Bohu,

ich habe es noch nicht ganz verstanden, funktioniert das Script jetzt?
Was es mit ASCII 8 als Beginn der Zeile auf sich hat, kann ich nicht deuten. Ist das eine besondere Voraussetzung unter DOS? Ich kenne das Zeichen nur als "Backspace", was zumindest unter Windows ein Zurücklaufen des Cursors um ein Zeichen verursacht.
Wenn N immer 1 ist, wäre das aber noch nicht richtig, oder? Hast du noch eine leere Datei "1" im Ordner?

Steffen
bm-magic
bm-magic 25.03.2022 um 14:31:14 Uhr
Goto Top
Hallo Steffen,

entschuldige und vergiss es mit dem ASCII.
(Mein OS ist Linux Mint 20.3 und ich kopiere Dein Script als Datei mit Textbearbeitung vermutlich als UTF-8. Der DOS Editor versteht es nicht als Zeilen Wechsel. Also muss ich nacharbeiten. )

Nun zum Thema:
Egal von welche Partition ich teste wird "N 1" auf dem Bildschirm angezeigt UND als SET N=1 gesetzt!
Im Ordner gibt es keine leere "1" Datei aber je nach Partition eine "4" oder "5" Datei.
Ich finde es also jetzt schon als eine "Halbwunder" und bewundere Dich dafür.

Grüße

Bohu
rubberman
rubberman 25.03.2022 um 14:41:53 Uhr
Goto Top
Ich habe eine "Ahnung" was die Ursache sein könnte: 1 ist immer vorhanden da 1 als Stream Nummer für die Standard-Ausgabe interpretiert wird. Ich lasse QBasic mal Dateien erzeugen, die mit N anfangen (also bspw. "N4"). Außerdem brauchen wir ja später für die NB.TXT zwei Variablen. Also definiere ich jetzt Variablen NX und NY für LIN_4 und LIN_5. Alle anderen Nummern laufen in eine Fehlermeldung.

Script ist sofort geändert ...

Steffen
rubberman
rubberman 25.03.2022 um 15:05:55 Uhr
Goto Top
Mist. Ich hatte vergessen die IF EXIST Anweisungen zu ändern. Tut mir leid face-sad
bm-magic
bm-magic 25.03.2022 um 15:40:23 Uhr
Goto Top
Hallo Steffen,

;-(. Leider ein "Rückschritt. Nun bekomme ich die Meldung "Nummer nicht gefunden" und es fehlt im SET die N=1.

Schade.

Bohu
rubberman
rubberman 25.03.2022 aktualisiert um 15:55:27 Uhr
Goto Top
Wird eine leere Datei N4 oder N5 erstellt?

Wie gesagt, ich hatte die IF EXIST Anweisungen vergessen. Wenn da bei dir noch
IF EXIST 1 GOTO N1
statt
IF EXIST N1 GOTO N1
steht, müsstest du noch mal neu testen.

es fehlt im SET die N=1
Sollte jetzt auch nicht mehr existieren. Stattdessen NX=4 und NY=5 bzw. umgekehrt.

Steffen
bm-magic
bm-magic 25.03.2022 um 16:50:53 Uhr
Goto Top
Hallo Steffen,

habe es mal wieder getestet. Es gibt keine Fehlermeldung.
Auf dem Bildschirm erscheint:
a. NX=4, NY=5.
b. NX=5, NY=4.
und diese Zeichen erscheinen auch im SET.
Es gibt aber die Dateien "1" oder "2" nicht mehr.

Nette Grüße

Bohu
rubberman
rubberman 25.03.2022 um 17:08:21 Uhr
Goto Top
Hallo Bohu,

dann haben wir die erste Hürde geschafft. Nein, Dateien "1" oder "2" darf es nicht mehr geben. Wenn überhaupt dann "N4" oder "N5". Die soll das Script aber löschen sobald sie gefunden werden, damit sie beim nächsten Aufruf nicht bereits existieren. Also alles so wie gewollt face-smile

Jetzt können wir langsam ins Finale gehen. Erster Stepp: NB.TXT schreiben, indem wir die Variablen NX und NY verwenden.
@ECHO OFF
SET VOLDAT=VOL.TXT
SET SEARCH=LIN_
SET SCRIPT=LAUFW.BAS
SET NBTXT=NB.TXT

REM Ausgabe von VOL in Datei umleiten
VOL C:>%VOLDAT%

REM ggf. QBasic Code erzeugen
IF NOT EXIST %SCRIPT% GOTO CREATE
:ENDCREATE

REM QBasic ausfuehren
QBASIC /RUN %SCRIPT%
REM Erstellte Textdatei suchen und Nummer definieren.
IF EXIST N1 GOTO N1
IF EXIST N2 GOTO N2
IF EXIST N3 GOTO N3
IF EXIST N4 GOTO N4
IF EXIST N5 GOTO N5
IF EXIST N6 GOTO N6
IF EXIST N7 GOTO N7
IF EXIST N8 GOTO N8
IF EXIST N9 GOTO N9
ECHO Nummer nicht gefunden.
PAUSE
GOTO EOF

:ERR
DEL N%NX%
ECHO LIN_%NX% existiert nicht.
PAUSE
GOTO EOF

:FOUND
DEL N%NX%
GOTO WRITENB
:ENDWRITENB

REM Ausgeben, was in NB.TXT geschrieben wurde
ECHO -------------
TYPE %NBTXT%
ECHO -------------

PAUSE
GOTO EOF

REM ~~~~~~~~~~~~~~~ Subroutinen ~~~~~~~~~~~~~~~
REM Datei LAUFW.BAS schreiben.
:CREATE
ECHO ' Suchzeichenfolge vor der Nummer in der Textdatei>%SCRIPT%  
ECHO s$ = "%SEARCH%">>%SCRIPT%  
ECHO ' Textdatei oeffnen>>%SCRIPT%  
ECHO OPEN "%VOLDAT%" FOR INPUT AS #1>>%SCRIPT%  
ECHO ' erste Zeile lesen>>%SCRIPT%  
ECHO LINE INPUT #1, ln$>>%SCRIPT%
ECHO ' zweite Zeile lesen>>%SCRIPT%  
ECHO LINE INPUT #1, ln$>>%SCRIPT%
ECHO ' Textdatei schliessen>>%SCRIPT%  
ECHO CLOSE #1>>%SCRIPT%
ECHO ' Zahl nach der Suchzeichenfolge extrahieren>>%SCRIPT%  
ECHO n$ = MID$(ln$, INSTR(ln$, s$) + LEN(s$), 1)>>%SCRIPT%
ECHO ' Datei mit lediglich N und der Zahl als Dateiname erzeugen>>%SCRIPT%  
ECHO n$ = "N" + n$>>%SCRIPT%  
ECHO OPEN n$ FOR OUTPUT AS #1>>%SCRIPT%
ECHO CLOSE #1>>%SCRIPT%
ECHO ' Script beenden>>%SCRIPT%  
ECHO SYSTEM>>%SCRIPT%
GOTO ENDCREATE

REM Variablen NX und NY definieren, abhaengig von der gefundenen Datei
:N1
SET NX=1
GOTO ERR

:N2
SET NX=2
GOTO ERR

:N3
SET NX=3
GOTO ERR

:N4
SET NX=4
SET NY=5
GOTO FOUND

:N5
SET NX=5
SET NY=4
GOTO FOUND

:N6
SET NX=6
GOTO ERR

:N7
SET NX=7
GOTO ERR

:N8
SET NX=8
GOTO ERR

:N9
SET NX=9
GOTO ERR

REM NB.TXT schreiben
:WRITENB
ECHO SA /CLS>%NBTXT%
ECHO WINDOW 1,08,12,65 LEUCHTEND GELB AUF BLAU EXPLODE>>%NBTXT%
ECHO ROWCOL 02,20 "*** ICH BIN EIN ERSATZ PRA-PC ***">>%NBTXT%  
ECHO ROWCOL 04,24 "Nun bist Du gerade dabei die">>%NBTXT%  
ECHO ROWCOL 05,27 "PART. LIN_%NX% zu starten.">>%NBTXT%  
ECHO ROWCOL 07,24 "Wenn es die richtige Linie ist,">>%NBTXT%  
ECHO ROWCOL 08,24 "druecke die Taste W.">>%NBTXT%  
ECHO ROWCOL 10,24 "Die PART. LIN_%NY% kannst du starten,">>%NBTXT%  
ECHO ROWCOL 11,24 "nach dem Druck auf Taste N.">>%NBTXT%  
ECHO WINDOW 14,15,16,57 LEUCHTEND WEISS AUF MAGENTA>>%NBTXT%
ECHO ROWCOL 15,17 >>%NBTXT%
ECHO ASK "Deine Wahl: W [W]eiter oder N [N]euboot " NW DEFAULT=W>>%NBTXT%  
ECHO ROWCOL 17,0 >>%NBTXT%
ECHO SA /CLS>>%NBTXT%
ECHO ROWCOL 1,0 >>%NBTXT%
GOTO ENDWRITENB

REM ~~~~~~~~~~~~~~~ Ende ~~~~~~~~~~~~~~~
:EOF

Am Ende sollte jetzt der Inhalt der NB.TXT ausgegeben werden, mit
"PART. LIN_4 zu starten."
in einer Zeile und
"Die PART. LIN_5 kannst du starten,"
weiter unten. Die 4 und 5 vertauscht im anderen Fall.

Grüße
Steffen
bm-magic
bm-magic 25.03.2022 aktualisiert um 18:01:13 Uhr
Goto Top
Hallo Steffen,

DAS IST UNGLAUBLICH face-wink))
"es geeeht".

Auf dem Bildschirm wird die NB.BAT mit den RICHTIGEN Linien angezeigt.
(Habe mehrmals die Partition gewechselt.) face-wink)

DANKE

Bohu

PS Die nb.txt Datei ist nun in dem Work Verzeichnis vorhanden!
rubberman
rubberman 25.03.2022 um 18:06:36 Uhr
Goto Top
Hallo Bohu,
Super face-smile
Dann muss ich jetzt noch versuche die restliche Logik einzubauen. Kann ein paar Minuten dauern. Dabei muss ich mich aber komplett auf den Code aus deinem ersten Beitrag verlassen. Ohne DOS, BE und PQBOOT ist das für mich leider ein Ratespiel.

Grüße
Steffen
rubberman
Lösung rubberman 25.03.2022 um 18:20:09 Uhr
Goto Top
So könnte das nun funktionieren, hoffe ich:
@ECHO OFF
SET VOLDAT=VOL.TXT
SET SEARCH=LIN_
SET SCRIPT=LAUFW.BAS
SET NBTXT=D:\NB\NB.txt

REM Ausgabe von VOL in Datei umleiten
VOL C:>%VOLDAT%

REM ggf. QBasic Code erzeugen
IF NOT EXIST %SCRIPT% GOTO CREATE
:ENDCREATE

REM QBasic ausfuehren
QBASIC /RUN %SCRIPT%
REM Erstellte Textdatei suchen und Nummer definieren.
IF EXIST N1 GOTO N1
IF EXIST N2 GOTO N2
IF EXIST N3 GOTO N3
IF EXIST N4 GOTO N4
IF EXIST N5 GOTO N5
IF EXIST N6 GOTO N6
IF EXIST N7 GOTO N7
IF EXIST N8 GOTO N8
IF EXIST N9 GOTO N9
ECHO Nummer nicht gefunden.
GOTO EOF

:ERR
DEL N%NX%
ECHO LIN_%NX% existiert nicht.
GOTO EOF

:FOUND
DEL N%NX%
REM NB.TXT schreiben
GOTO WRITENB
:ENDWRITENB

@BE %NBTXT%
REM Eingabe auswerten
IF ERRORLEVEL 2 GOTO EOF

ECHO           N (N)euboot
CALL D:\NB\PQBOOT.EXE
GOTO EOF

REM ~~~~~~~~~~~~~~~ Subroutinen ~~~~~~~~~~~~~~~
REM Datei LAUFW.BAS schreiben.
:CREATE
ECHO ' Suchzeichenfolge vor der Nummer in der Textdatei>%SCRIPT%  
ECHO s$ = "%SEARCH%">>%SCRIPT%  
ECHO ' Textdatei oeffnen>>%SCRIPT%  
ECHO OPEN "%VOLDAT%" FOR INPUT AS #1>>%SCRIPT%  
ECHO ' erste Zeile lesen>>%SCRIPT%  
ECHO LINE INPUT #1, ln$>>%SCRIPT%
ECHO ' zweite Zeile lesen>>%SCRIPT%  
ECHO LINE INPUT #1, ln$>>%SCRIPT%
ECHO ' Textdatei schliessen>>%SCRIPT%  
ECHO CLOSE #1>>%SCRIPT%
ECHO ' Zahl nach der Suchzeichenfolge extrahieren>>%SCRIPT%  
ECHO n$ = MID$(ln$, INSTR(ln$, s$) + LEN(s$), 1)>>%SCRIPT%
ECHO ' Datei mit lediglich N und der Zahl als Dateiname erzeugen>>%SCRIPT%  
ECHO n$ = "N" + n$>>%SCRIPT%  
ECHO OPEN n$ FOR OUTPUT AS #1>>%SCRIPT%
ECHO CLOSE #1>>%SCRIPT%
ECHO ' Script beenden>>%SCRIPT%  
ECHO SYSTEM>>%SCRIPT%
GOTO ENDCREATE

REM Variablen NX und NY definieren, abhaengig von der gefundenen Datei
:N1
SET NX=1
GOTO ERR

:N2
SET NX=2
GOTO ERR

:N3
SET NX=3
GOTO ERR

:N4
SET NX=4
SET NY=5
GOTO FOUND

:N5
SET NX=5
SET NY=4
GOTO FOUND

:N6
SET NX=6
GOTO ERR

:N7
SET NX=7
GOTO ERR

:N8
SET NX=8
GOTO ERR

:N9
SET NX=9
GOTO ERR

REM NB.TXT schreiben
:WRITENB
ECHO SA /CLS>%NBTXT%
ECHO WINDOW 1,08,12,65 LEUCHTEND GELB AUF BLAU EXPLODE>>%NBTXT%
ECHO ROWCOL 02,20 "*** ICH BIN EIN ERSATZ PRA-PC ***">>%NBTXT%  
ECHO ROWCOL 04,24 "Nun bist Du gerade dabei die">>%NBTXT%  
ECHO ROWCOL 05,27 "PART. LIN_%NX% zu starten.">>%NBTXT%  
ECHO ROWCOL 07,24 "Wenn es die richtige Linie ist,">>%NBTXT%  
ECHO ROWCOL 08,24 "druecke die Taste W.">>%NBTXT%  
ECHO ROWCOL 10,24 "Die PART. LIN_%NY% kannst du starten,">>%NBTXT%  
ECHO ROWCOL 11,24 "nach dem Druck auf Taste N.">>%NBTXT%  
ECHO WINDOW 14,15,16,57 LEUCHTEND WEISS AUF MAGENTA>>%NBTXT%
ECHO ROWCOL 15,17 >>%NBTXT%
ECHO ASK "Deine Wahl: W [W]eiter oder N [N]euboot " NW DEFAULT=W>>%NBTXT%  
ECHO ROWCOL 17,0 >>%NBTXT%
ECHO SA /CLS>>%NBTXT%
ECHO ROWCOL 1,0 >>%NBTXT%
GOTO ENDWRITENB

REM ~~~~~~~~~~~~~~~ Ende ~~~~~~~~~~~~~~~
:EOF
IF EXIST %NBTXT% DEL %NBTXT%
ECHO           W (W)eiter

Grüße
Steffen
bm-magic
bm-magic 25.03.2022 um 18:59:16 Uhr
Goto Top
Hallo Steffen...
NUN IST ES EIN VOLLWUNDER.
Es funktioniert samt meiner Formatierung.
Hätte ich nicht, in so kurzem Zeit, erwartet.

Du Wirst mir sehr fehlen.

PS Ich verstehe fast gar nichts wie es passiert, werde mich aber SEHR
bemühen, es herauszufinden.

Meine Hauptfrage. In dem Script sind viele ECHOs. Ich sehe aber nichts. Läuft es so schnell?
rubberman
rubberman 25.03.2022 aktualisiert um 19:12:02 Uhr
Goto Top
Hallo Bohu

Ich verstehe fast gar nichts wie es passiert
Das ist gar nicht gut! Bei allem was du nicht verstehst, solltest du fragen. Auch gerne jetzt noch.

Meine Hauptfrage. In dem Script sind viele ECHOs. Ich sehe aber nichts. Läuft es so schnell?
Die ECHO-Ausgaben in den Subroutinen :CREATE und :WRITENB werden in Dateien umgeleitet. Auf diese Weise werden die Dateien LAUFW.BAS und NB.TXT erstellt. Das Prinzip ist einfach. Es gibt die Umleitungszeichen > und >>.

Das > in ...
ECHO Hallo>beispiel.txt
... erstellt die Datei beispiel.txt neu und schreibt Hallo in die erste Zeile.

ECHO Welt>>beispiel.txt
... hängt Welt als zweite Zeile an. Bei weiteren Umleitungen mit >> werden weitere Zeilen angehängt.

Grüße
Steffen
bm-magic
bm-magic 25.03.2022 um 19:33:34 Uhr
Goto Top
Hallo Steffen,

Du weiß nicht, wie ich Dir DANKBAR bin. Aber:
"Es gibt Sachen zwischen Himmel und Erde, die ein Sterblicher nicht verstehen kann."

- Es funktioniert zur Zeit auf D:\Work\.Ich werde es nun Ins D:\NB\ verschieben und als NB.BAT umbenennen.
- Um es besser zu verstehen, hätte ich es gern (provisorisch) mit Haltepunkten getrennt, um den Vorgang
nachvollziehen zu können.
Werde ich die Dateien dann auch sehen und lesen können?

UND Darf ich Dein Werk auch in dem QBasic Forum, natürlich mit Deinem Namen, präsentieren?

NOCH EINMAL DANKE

PS Kennst Du es Bitte als Erledigt markieren?

Alles GUTE

Bohu
148523
148523 25.03.2022 aktualisiert um 19:54:28 Uhr
Goto Top
PS Kennst Du es Bitte als Erledigt markieren?
Solltest du eigentlich selber wissen das aus guten Gründen nur DU als Thread Owner dies selber machen kannst ! Sonst könnte jeder hier jegliche Threads schliessen ! Wäre ja nicht so dolle, oder ?!
Einfach nur mal die FAQs lesen ! 🧐
Wie kann ich einen Beitrag als gelöst markieren?
rubberman
rubberman 25.03.2022 um 20:32:04 Uhr
Goto Top
Hallo Bohu

- Um es besser zu verstehen, hätte ich es gern (provisorisch) mit Haltepunkten getrennt, um den Vorgang nachvollziehen zu können.
Werde ich die Dateien dann auch sehen und lesen können?
Natürlich. Du kannst bspw. so etwas wie ...
type datei.endung
pause
... einfügen. Das TYPE schreibt den Inhalt der Datei aus und das PAUSE wartet darauf dass du eine Taste drückst, bevor es weiter geht.

UND Darf ich Dein Werk auch in dem QBasic Forum, natürlich mit Deinem Namen, präsentieren?
Gerne (auch ohne meinen Name, das ist mir nicht wichtig). Macht doch auch durchaus Sinn so etwas für die Nachwelt festzuhalten. Und du kannst auch gerne auf diesen Thread verlinken, dann sind andere in der Lage nachzuvollziehen wie das ganze zustande gekommen ist. Vielleicht bekommst du ja auch noch ein paar Anregungen für Optimierungen.

Und natürlich kannst du weiter Fragen stellen, wenn noch etwas unklar ist. Ich habe bereits einige Kommentare in den Code geschrieben. Wenn du dir das alles in Ruhe durchliest, erklärt sich vermutlich schon manches face-smile

Ein schönes Wochenende!
Steffen
rubberman
rubberman 26.03.2022 aktualisiert um 14:25:21 Uhr
Goto Top
Hallo Bohu,

habe den Scriptcode eingekürzt (wir brauchen nur 4 und 5 zur Auswertung), dafür mehr Kommentare eingefügt.

Übrigens: lade dir mal das dos2unix Package auf deine Linux Distro:
sudo apt install dos2unix
Damit bekommst du auch das unix2dos Tool mitgeliefert, was dir die Zeilenumbrüche für DOS wieder in Ordnung bringt.
Einfach
unix2dos datei.endung
in der Shell ausführen.

Grüße
Steffen

@ECHO OFF
REM Dateiname der Datei in die die Ausgabe von VOL umgeleitet wird.
SET VOLDAT=VOL.TXT

REM Konstanter Teil des Datentraegernamens, hinter dem die variable Nummer
REM (4 oder 5) zu finden ist.
SET SEARCH=LIN_

REM Dateiname des QBasic Scripts
SET SCRIPT=LAUFW.BAS

REM Dateiname des Scripts, das von BE für formatierte Aus- und Eingabe
REM genutzt wird.
SET NBTXT=NB.TXT

REM Ausgabe von VOL in Datei "VOL.TXT" umleiten.  
REM "VOL.TXT" beinhaltet den Datentraegername (LIN_4 oder LIN_5) in  
REM  der 2. Zeile. Dieser soll von QBasic gefunden und ausgewertet werden.
VOL C:>%VOLDAT%

REM ggf. "LAUFW.BAS" erzeugen, falls noch nicht vorhanden  
IF NOT EXIST %SCRIPT% GOTO CREATE
:ENDCREATE

REM QBasic ausfuehren. Das .BAS Script erstellt, je nachdem ob in VOL.TXT
REM LIN_4 oder LIN_5 gefunden wunrde, eine leere Datei "N4" oder "N5".  
QBASIC /RUN %SCRIPT%
REM Von QBasic erstellte Textdatei ("N4" oder "N5") suchen  
REM und entsprechende Subroutine (:N4 oder :N5) ausfuehren
REM um Variablen NX und NY mit Werten 4 und 5 bzw. 5 und 4 zu definieren.
IF EXIST N4 GOTO N4
IF EXIST N5 GOTO N5
REM Falls weder "N4" noch "N5" gefunden wurde:  
ECHO Nummer nicht gefunden.
GOTO EOF

REM Die Subroutine :N4 oder :N5 springt hierhin zurueck.
:FOUND
REM Datei "N4" oder "N5" loeschen, da sie beim naechsten Ausfuehren  
REM des Scripts nicht bereits vorhanden sein darf.
DEL N%NX%
REM NB.TXT unter Verwendung der Variablen NX (4 oder 5)
REM und NY (5 oder 4) neu schreiben
GOTO WRITENB
:ENDWRITENB

REM NB.TXT fuer formatierte Aus- und Eingabe verwenden 
@BE %NBTXT%
REM Eingabe anhand des von BE zurueckgegebenen Errorlevelwertes
REM (1 fuer N und 2 fuer W) auswerten
REM Falls W ausgewaehlt wurde:
IF ERRORLEVEL 2 GOTO EOF
REM Falls N ausgewaehlt wurde:
ECHO           N (N)euboot
CALL D:\NB\PQBOOT.EXE
GOTO EOF

REM ~~~~~~~~~~~~~~~ Subroutinen ~~~~~~~~~~~~~~~
REM Datei LAUFW.BAS schreiben.
:CREATE
ECHO ' Suchzeichenfolge vor der Nummer in der Textdatei>%SCRIPT%  
ECHO s$ = "%SEARCH%">>%SCRIPT%  
ECHO ' Textdatei oeffnen>>%SCRIPT%  
ECHO OPEN "%VOLDAT%" FOR INPUT AS #1>>%SCRIPT%  
ECHO ' erste Zeile lesen>>%SCRIPT%  
ECHO LINE INPUT #1, ln$>>%SCRIPT%
ECHO ' zweite Zeile lesen (hier findet sich die Suchzeichenfolge)>>%SCRIPT%  
ECHO LINE INPUT #1, ln$>>%SCRIPT%
ECHO ' Textdatei schliessen>>%SCRIPT%  
ECHO CLOSE #1>>%SCRIPT%
ECHO ' Zahl nach der Suchzeichenfolge extrahieren und "N" davor setzen>>%SCRIPT%  
ECHO n$ = "N" + MID$(ln$, INSTR(ln$, s$) + LEN(s$), 1)>>%SCRIPT%  
ECHO ' Leere Datei mit Dateiname "N" und der Zahl erzeugen>>%SCRIPT%  
ECHO OPEN n$ FOR OUTPUT AS #1>>%SCRIPT%
ECHO CLOSE #1>>%SCRIPT%
ECHO ' Script beenden>>%SCRIPT%  
ECHO SYSTEM>>%SCRIPT%
GOTO ENDCREATE

REM Variablen NX und NY definieren, abhaengig von der gefundenen Datei
:N4
SET NX=4
SET NY=5
GOTO FOUND

:N5
SET NX=5
SET NY=4
GOTO FOUND

REM NB.TXT unter Verwendung der Variablenwerte in NX und NY
REM (4 und 5, oder 5 und 4) neu schreiben
:WRITENB
ECHO SA /CLS>%NBTXT%
ECHO WINDOW 1,08,12,65 LEUCHTEND GELB AUF BLAU EXPLODE>>%NBTXT%
ECHO ROWCOL 02,20 "*** ICH BIN EIN ERSATZ PRA-PC ***">>%NBTXT%  
ECHO ROWCOL 04,24 "Nun bist Du gerade dabei die">>%NBTXT%  
ECHO ROWCOL 05,27 "PART. %SEARCH%%NX% zu starten.">>%NBTXT%  
ECHO ROWCOL 07,24 "Wenn es die richtige Linie ist,">>%NBTXT%  
ECHO ROWCOL 08,24 "druecke die Taste W.">>%NBTXT%  
ECHO ROWCOL 10,24 "Die PART. %SEARCH%%NY% kannst du starten,">>%NBTXT%  
ECHO ROWCOL 11,24 "nach dem Druck auf Taste N.">>%NBTXT%  
ECHO WINDOW 14,15,16,57 LEUCHTEND WEISS AUF MAGENTA>>%NBTXT%
ECHO ROWCOL 15,17 >>%NBTXT%
ECHO ASK "Deine Wahl: W [W]eiter oder N [N]euboot " NW DEFAULT=W>>%NBTXT%  
ECHO ROWCOL 17,0 >>%NBTXT%
ECHO SA /CLS>>%NBTXT%
ECHO ROWCOL 1,0 >>%NBTXT%
GOTO ENDWRITENB

REM ~~~~~~~~~~~~~~~ Ende ~~~~~~~~~~~~~~~
:EOF
REM Ggf. NB.TXT loeschen. Sie wird nicht mehr benoetigt
REM und sowieso immer wieder neu erstellt.
IF EXIST %NBTXT% DEL %NBTXT%
ECHO           W (W)eiter
bm-magic
bm-magic 26.03.2022 um 14:52:14 Uhr
Goto Top
Hallo Steffen,

Du bist einfach "unbezahlbar". Danke SEHR.
- Dein Beitrag hatte sehr viele "neue" Fragen verursacht, die nicht "direkt" mit diesem Thema verbunden sind.
Ich versuche es zu kürzen.
a. Ich wollte es weiter zu geben, aber wie kann ich diesen Thread verlinken?
b. Weiter oben habe ich geschrieben, das ich den Code für DOS "nacharbeiten muss.
(Habe nicht erwähnt, das es "relativ" Zeit aufwendig und "Fehler-trächtig" ist.)
Vermutlich kann ich aber "nur" mein Editor nicht richtig bedienen, denn es gibt sicher eine Mögligkeit,
der Code direkt als ASCII zu speichern. Leider kann ich VIM nicht bedienen und benutze XED und/oder KATE.
c. Jedesmal, als Du schriebst, das DU recherchiert hast, hatte ich ein schlechtes Gewissen, den es wäre
meine Arbeit gewesen...nur...ich kann es nicht.
d. Deine Aufklärung mit dem "ECHO" in Datei umleiten fand ich SEHR GUT, aber...könnte ich es "irgendwo"
selbst nachlesen? (Um nicht "ständig" zu "nerven")?
e. Habe selbst einfache Batch gemacht, die funktionieren, aber da zwischen "Syntaxfehler" "auf-blitzt".
Die Ursache finde ich aber nicht, also "lebe" ich damit. U.U. gibt dafür eine Hilfe.

Meine Liste ist im Wirklichkeit "viel länger"... face-wink

Aber nun zur Deinem Code:
Ich werde es sofort testen, aber zu erst werde ich versuchen, es im ASCII zu speichern.

DANKE und ein schönes Tag

Bohu
rubberman
rubberman 26.03.2022 aktualisiert um 15:47:34 Uhr
Goto Top
Hallo Bohu

a. Ich wollte es weiter zu geben, aber wie kann ich diesen Thread verlinken?
Einfach den Link oben aus der Adressleiste in deinem Browser herauskopieren. Sollte dieser sein:
</i>

b. Weiter oben habe ich geschrieben, das ich den Code für DOS "nacharbeiten muss.
(Habe nicht erwähnt, das es "relativ" Zeit aufwendig und "Fehler-trächtig" ist.)
Vermutlich kann ich aber "nur" mein Editor nicht richtig bedienen, denn es gibt sicher eine Mögligkeit,
der Code direkt als ASCII zu speichern. Leider kann ich VIM nicht bedienen und benutze XED und/oder KATE.
Ich hatte dir oben gerade unix2dos verlinkt. Damit ist das ohne Aufwand möglich. Einfach in der Shell (sh oder bash) ausführen.
ASCII hat damit nichts zu tun. Ich habe mich auch in den Kommentaren auf ASCII Zeichen beschränkt, somit ist der Inhalt der Datei in UTF-8 derselbe wie in einer ASCII Datei. Es geht lediglich um Zeilenumbrüche die unter Linux nur aus dem Zeichen ASCII 10, unter Windows und DOS aber aus 2 Zeichen ASCII 13 und ASCII 10 bestehen. Du hast Glück, dass dein Workaround mit ASCII 8 irgendwie funktioniert.

EDIT: Hatte gerade noch das zu XED gefunden:
On the "Save as" GUI, near the bottom, select "Windows" from the "Line Ending" popup menu.
Im "Speichern unter" Menü sollte es ziemlich weit unten also ein "Zeilenende" geben, wo man "Windows" auswählen kann. Damit wäre das auch direkt in XED machbar.

c. Jedesmal, als Du schriebst, das DU recherchiert hast, hatte ich ein schlechtes Gewissen, den es wäre
meine Arbeit gewesen...nur...ich kann es nicht.
Die meisten Informationen findet man, wenn man gezielt nach englischem Inhalt sucht. Da gibt es aber bei vielen Leuten die Sprachbarriere ...

d. Deine Aufklärung mit dem "ECHO" in Datei umleiten fand ich SEHR GUT, aber...könnte ich es "irgendwo"
selbst nachlesen? (Um nicht "ständig" zu "nerven")?
Suche mal bei Google "Batch Echo Umleitung". Davon abgesehen sind das tatsächlich Dinge, die bis in die heutige Zeit auf fast jedem OS funktionieren (auch in der Linux Shell, kannst es testen face-wink).

e. Habe selbst einfache Batch gemacht, die funktionieren, aber da zwischen "Syntaxfehler" "auf-blitzt".
Die Ursache finde ich aber nicht, also "lebe" ich damit. U.U. gibt dafür eine Hilfe.
Wo testest du? Unter DOS? In einem DOS Emulator? Schreib doch einfach mal den Code. Das lässt sich sicher einfach herausfinden.

Grüße
Steffen
bm-magic
bm-magic 26.03.2022 um 16:06:25 Uhr
Goto Top
Hallo Steffen,

mit dem unix2dos hast Du mich schon wieder "gerettet". Ich war noch mit "Versuchen" (inzwischen im Windows)
beschäftigt.

Der Link habe ich nun auch face-smile. Wie soll ich es selbst wissen...es war viel zu einfach um es darauf zu kommen.

Leider kenne ich keinen DOS Emulator. Habe einen USB Disketten Laufwerk -> Diskette und -> Interner Disketten Laufwerk in dem DOS PC.
- Bem. Ich habe lange gebraucht, damit die zweite Partition auch bootfähig war, denn wenn die erste Partition zu groß ist, sind die weiteren primären nicht mehr bootfähig. Ob man so etwas simulieren kann?

Wenn ich diesen Beitrag "verdaut habe", werde ich mich trauen einen "neuen" Beitrag mit einem von meinen "Problemen" zu schreiben.

Und nun werde ich den "unix2dos" "quälen".

Nette Grüße
Bohu
rubberman
rubberman 26.03.2022 aktualisiert um 16:17:41 Uhr
Goto Top
Hallo Bohu,

Ich hatte noch ein EDIT hinterher geschoben. Wirst du aber wahrscheinlich nicht gesehen haben.
EDIT: Hatte gerade noch das zu XED gefunden:
On the "Save as" GUI, near the bottom, select "Windows" from the "Line Ending" popup menu.
Im "Speichern unter" Menü sollte es ziemlich weit unten also ein "Zeilenende" geben, wo man "Windows" auswählen kann. Damit wäre das auch direkt in XED machbar.

Da bin ich leider überfragt:
- Bem. Ich habe lange gebraucht, damit die zweite Partition auch bootfähig war, denn wenn die erste Partition zu groß ist, sind die weiteren primären nicht mehr bootfähig. Ob man so etwas simulieren kann?

Grüße
Steffen
rubberman
rubberman 27.03.2022 um 12:57:17 Uhr
Goto Top
Hallo Bohu,

hast du Lust noch mal zu probieren, ob wir gänzlich auf QBasic verzichten können?
Ich weiß dass das FIND Kommando unter DOS existiert, mit dem eine Zeichenfolge (wie LIN_4 oder LIN_5) in einer Datei gefunden werden kann. Unter Windows setzt FIND den Errorlevel auf 1, falls die Zeichenfolge nicht gefunden wird. Ob das unter DOS schon der Fall war, konnte ich nicht herausfinden. Aber einen Versuch ist es wert ...

Grüße
Steffen

@ECHO OFF
REM Dateiname der Datei in die die Ausgabe von VOL umgeleitet wird.
SET VOLDAT=VOL.TXT

REM Konstanter Teil des Datentraegernamens, hinter dem die variable Nummer
REM (4 oder 5) zu finden ist.
SET SEARCH=LIN_

REM Dateiname des Scripts, das von BE für formatierte Aus- und Eingabe
REM genutzt wird.
SET NBTXT=NB.TXT

REM Ausgabe von VOL in Datei "VOL.TXT" umleiten.  
REM "VOL.TXT" beinhaltet den Datentraegername (LIN_4 oder LIN_5)  
VOL C:>%VOLDAT%

REM LIN_4 oder LIN_5 mittels FIND Kommando in "VOL.TXT" suchen.  
REM Das FIND Kommando setzt ERRORLEVEL zu 1 wenn die Suchzeichenfolge
REM nicht gefunden wurde. Geprueft wird also, ob ERRORLEVEL nicht 1 ist,
REM um herauszufinden ob die Suchzeichenfolge gefunden wurde und in die
REM entsprechende Subroutine :N4 oder :N5 zu springen.
FIND "%SEARCH%4" %VOLDAT% >NUL  
IF NOT ERRORLEVEL 1 GOTO N4
FIND "%SEARCH%5" %VOLDAT% >NUL  
IF NOT ERRORLEVEL 1 GOTO N5
REM Falls weder LIN_4 noch LIN_5 gefunden wurde:
ECHO Nummer nicht gefunden.
PAUSE
GOTO EOF

REM Die Subroutine :N4 oder :N5 springt hierhin zurueck.
:FOUND
REM NB.TXT unter Verwendung der Variablen NX (4 oder 5)
REM und NY (5 oder 4) neu schreiben
GOTO WRITENB
:ENDWRITENB

REM NB.TXT fuer formatierte Aus- und Eingabe verwenden 
@BE %NBTXT%
REM Eingabe anhand des von BE zurueckgegebenen Errorlevelwertes
REM (1 fuer N und 2 fuer W) auswerten
REM Falls W ausgewaehlt wurde:
IF ERRORLEVEL 2 GOTO EOF
REM Falls N ausgewaehlt wurde:
ECHO           N (N)euboot
CALL D:\NB\PQBOOT.EXE
GOTO EOF

REM ~~~~~~~~~~~~~~~ Subroutinen ~~~~~~~~~~~~~~~
REM Variablen NX und NY definieren, abhaengig von der gefundenen Zeichenfolge
:N4
SET NX=4
SET NY=5
GOTO FOUND

:N5
SET NX=5
SET NY=4
GOTO FOUND

REM NB.TXT unter Verwendung der Variablenwerte in NX und NY
REM (4 und 5, oder 5 und 4) neu schreiben
:WRITENB
ECHO SA /CLS>%NBTXT%
ECHO WINDOW 1,08,12,65 LEUCHTEND GELB AUF BLAU EXPLODE>>%NBTXT%
ECHO ROWCOL 02,20 "*** ICH BIN EIN ERSATZ PRA-PC ***">>%NBTXT%  
ECHO ROWCOL 04,24 "Nun bist Du gerade dabei die">>%NBTXT%  
ECHO ROWCOL 05,27 "PART. %SEARCH%%NX% zu starten.">>%NBTXT%  
ECHO ROWCOL 07,24 "Wenn es die richtige Linie ist,">>%NBTXT%  
ECHO ROWCOL 08,24 "druecke die Taste W.">>%NBTXT%  
ECHO ROWCOL 10,24 "Die PART. %SEARCH%%NY% kannst du starten,">>%NBTXT%  
ECHO ROWCOL 11,24 "nach dem Druck auf Taste N.">>%NBTXT%  
ECHO WINDOW 14,15,16,57 LEUCHTEND WEISS AUF MAGENTA>>%NBTXT%
ECHO ROWCOL 15,17 >>%NBTXT%
ECHO ASK "Deine Wahl: W [W]eiter oder N [N]euboot " NW DEFAULT=W>>%NBTXT%  
ECHO ROWCOL 17,0 >>%NBTXT%
ECHO SA /CLS>>%NBTXT%
ECHO ROWCOL 1,0 >>%NBTXT%
GOTO ENDWRITENB

REM ~~~~~~~~~~~~~~~ Ende ~~~~~~~~~~~~~~~
:EOF
REM Ggf. NB.TXT loeschen. Sie wird nicht mehr benoetigt
REM und sowieso immer wieder neu erstellt.
IF EXIST %NBTXT% DEL %NBTXT%
ECHO           W (W)eiter
bm-magic
bm-magic 27.03.2022, aktualisiert am 28.03.2022 um 01:29:52 Uhr
Goto Top
Hallo Steffen,
zu erst Entschuldigung, das ich mich erst nun melde.
Mein "Kind", oder besser mein "Uropa" ist "krank geworden".
- Als ich, Dein Werk testen wollte, war "kein Laufwerk" vorhanden.
(Vermutlich habe ich meinen, fast 20jahrigen "Freund" zu viel beansprucht.)
Ich hoffe, das es "nur" der SCSI Controller ist.
Ich kann ihm aufrufen, die Festplatte wird erkannt, lässt sie sich verifizieren (68 GB dauert ein paar Stunden)
aber es hilft nicht. Habe mit einer anderen Platte das gleiche Problem.
- Ich habe schon bei Ebay ein anderes Controller bestellt...und warte auf die Lieferung.
Voraussichtlich am 31.03. Ich werde mich dann melden.

Sehr schöne Tage

Bohu
rubberman
rubberman 28.03.2022 um 11:41:42 Uhr
Goto Top
Hallo Bohu,

wir haben ja Zeit. Danke trotzdem für die Rückmeldung.
Du siehst, ich versuche mich gedanklich gerade 30 Jahre zurück zu versetzen. Aber sich da noch an Details zu erinnern, ist nicht so einfach. Natürlich könnte ich einen DOS Emulator, wie bspw. DosBox nutzen. Der versucht aber lediglich das Verhalten der command.com nachzuahmen (mit unvollständigem Befehlssatz und nicht immer genauso wie beim Original). Das hilft nicht bei solchen Detailfragen. Da benötigt man das echte OS mit den echten Kommando-Tools.

Grüße
Steffen
bm-magic
bm-magic 30.03.2022 aktualisiert um 21:52:37 Uhr
Goto Top
Hallo Steffen,

ich bin wieder im Spiel. "Transplantation gelungen".
Die "Organ" Kosten unten 30 €. "Operation" dauerte 10 Min.
Gesamtkosten "Unbezahlbar"...fast eine Woche meines Leben.
Zittern und Hoffen im Wechsel. face-wink

- Dein Script funktioniert "tadellos".
Und weil ich "Geizig" bin, habe ich mir erlaubt, die Variablen am Ende wieder zu entfernen:

SET VOLDAT=
SET SEARCH=
SET NBTXT=
SET  NY=
Habe nur die aktuelle Partition behalten.

Ich hoffe sehr, das Du ohne mich "lange Weile" hast.

Sehr Nette Grüße
Bohu
rubberman
rubberman 31.03.2022 um 01:15:28 Uhr
Goto Top
Hallo Bohu,

gut zu hören. Ohne QBasic könnte es nun auch etwas schneller sein.

Ich hoffe sehr, das Du ohne mich "lange Weile" hast.
Es ist sehr interessant, wieder mal "um die Ecke" zu denken, um irgend etwas unter DOS zum Laufen zu bringen. Hauptsächlich bastle ich sonst an C und C++ Algorithmen wenn ich am Rechner sitze. Aber mein Angebot, weiter Fragen zu stellen, gilt face-wink

Grüße
Steffen
bm-magic
bm-magic 31.03.2022 um 02:50:08 Uhr
Goto Top
Hallo Steffen,

es ist mir gerade eine "Panne" passiert. Habe an eine Antwort gearbeitet, [da ich mit "Adler System" schreibe, (zwei Finger über die Tastatur kreisen, "Beute" suchen und dann zuschlagen)] hatte es länger gedauert, ich war fertig...und nun ist die Nachricht "Weg"!
- Gibt es eine Mögligkeit um "Entwürfe" / letzte "Schritte" sehen zu können?
Also noch einmal:
- Ich habe die Schanze genommen, mit deinem Script, "spielen" zu können und finde ihm "EINFACH GENIAL".
(Denn kompliziert kann es "jeder".)
- Ich kann leider nur "gut" kopieren.
- Eine "hypothetische" Frage.
Wäre es sehr kompliziert, in der NB.TXT Datei "nur" die Werte zu ändern,
statt sie neu zu schreiben?
Der Grund: Nun habe eine "kleine" Ahnung, wie man eine Datei mit variablem Text erstellen kann,
kann mich aber nicht vorstellen, wie man eine bestehende Datei bearbeiten kann.
(Falls es zu kompliziert sein sollte, ignoriere BITTE diese Nachricht, denn dann werde ich es auch nicht
verstehen können.)

Noch einmal DANKE SEHR
und nur DAS BESTE

PS Ich habe schon vielmals mit C Begonnen, aber bleibe schon bei Datentypen hängen. ;-(
Mein "letztes" Werk: "C-HowTo" von Elias Fischer. Bin auf Seite 34. (Seit über einem Jahr.)
rubberman
rubberman 31.03.2022 um 12:01:50 Uhr
Goto Top
Hallo Bohu,

- Gibt es eine Mögligkeit um "Entwürfe" / letzte "Schritte" sehen zu können?
Ich glaube nicht. Wenn du ein instabiles Internet hast und es länger dauert Antworten zu schreiben - Tipp: Schreibe einfach erst mal ganz entspannt in deinen Texteditor und kopiere dort raus wenn du fertig bist.

- Eine "hypothetische" Frage.
Wäre es sehr kompliziert, in der NB.TXT Datei "nur" die Werte zu ändern,
statt sie neu zu schreiben?
Theoretisch geht das, wenn sich die Anzahl der Zeichen in der Datei dabei nicht ändert. Das geht aber nur auf binärer Ebene (Bytes im Datei-Stream an einer bestimmten Stelle durch gleiche Anzahl Bytes ersetzen). Batch bietet dafür keine Möglichkeit (in C geht das). Darüber hinaus ist es in den meisten Fällen wesentlich einfacher die Datei einfach neu zu schreiben.

PS Ich habe schon vielmals mit C Begonnen, aber bleibe schon bei Datentypen hängen. ;-(
Mein "letztes" Werk: "C-HowTo" von Elias Fischer. Bin auf Seite 34. (Seit über einem Jahr.)
Dann fängst du zumindest schon mal besser an als ich. Ich hatte vor ~15 Jahren einfach gestartet damit zu spielen und mich nach dem Prinzip "Versuch und Irrtum" durchgehangelt. Ich hatte keine Ahnung was der Unterschied zwischen C, C++ und der Windows API ist und einen furchtbaren Mix zusammen geschrieben, weil sie zum Teil untereinander kompatibel sind. Nur durch striktes Nachlesen im Internet habe ich langsam ein Verständnis aufgebaut. Mit einem Buch wäre das sicher zehnmal schneller gegangen face-smile

Grüße
Steffen
bm-magic
bm-magic 31.03.2022 um 15:35:13 Uhr
Goto Top
Hallo Steffen,

Danke für die Aufklärung. Es wäre sicher entspannter die Antworten zu erst im "normalem" Editor zu schreiben,
habe aber aus Erfahrung festgestellt, das "oft beim kopieren" die Formatierung verändert wurde und ich "zu faul bin", es nachzubessern.

Zu der Text Datei. Ich dachte, das man dort Deine Variable schon haben könnte, z.B. %SEARCH%%NX%.
Aber Deine Antwort ist ausreichend und gilt als "beantwortet".

Hätte ich nie gedacht, das Du erst vor 15 Jahren und als Autodidakt begonnen hast, den Dein Code
ist "Putzfrauen sicher" strukturiert, (Soll bedeuten, das die Aufklärung direkt im Code steckt.) und das
auch ein Leier wie ich, den Sinn begreifen muss. Es macht aber auch "ein bisschen" Hoffnung,
das ein "normaler Sterblicher" eine Schanze hat, anzufangen.

Bevor ich mich traue, eine neue (andere) Anfrage zu stellen, die Fragen vorab:
a. Wie groß darf/soll eine Batch sein, um sie hochladen zu können?
b. Soll man das "Ganze Projekt" oder nur Teile davon hochladen?
rubberman
rubberman 31.03.2022 aktualisiert um 17:55:37 Uhr
Goto Top
Hallo Bohu

Zu der Text Datei. Ich dachte, das man dort Deine Variable schon haben könnte, z.B. %SEARCH%%NX%.
So etwas wie %VARIABLENNAME% gehört zur Batch Syntax und nur der Kommandozeileninterpreter weiß, dass er die Zeichenfolge in Prozentzeichen durch den Wert einer Umgebungsvariablen ersetzen soll. Ich habe keine Ahnung ob das BE Tool das du nutzt, irgendeine Syntax versteht um eine Zeichenfolge in der Textdatei durch eine Umgebungsvariable zu ersetzen. Gibt es irgendwo eine Erklärung/Hilfe wie dieses Tool funktioniert?

Hätte ich nie gedacht, das Du erst vor 15 Jahren und als Autodidakt begonnen hast
Naja, Autodidakt ist in jedem Fall richtig. Vor 15 Jahren habe ich mit C begonnen. Aber meine ersten Gehversuche mit Programmierung waren tatsächlich mit BASIC in den späten 80ern. Damals noch auf einem "KC85" (dem "C64" der DDR, mit handelsüblichem Kassettenrekorder als "Laufwerk").

a. Wie groß darf/soll eine Batch sein, um sie hochladen zu können?
Ich glaube nicht dass du Dateien hochladen kannst. Du kannst Code nur in den Beitrag kopieren.

b. Soll man das "Ganze Projekt" oder nur Teile davon hochladen?
Gute Frage. Ich finde folgende Herangehensweise gut:
Zitat von Bjarne Stroustrup:
"Finding the smallest program that demonstrates the error" is a powerful debugging tool.
Es macht Sinn dein Problem in einen nicht allzu langen, aber lauffähigen Beispielcode zu packen, der den Fehler zeigt. Dann noch eine kurze Erklärung was du bekommst (Fehlermeldung, falsche Ausgabe, Crash etc.) und was du statt dessen erwartest wenn der Code fehlerfrei laufen würde.

Grüße
Steffen
bm-magic
bm-magic 31.03.2022 um 21:14:47 Uhr
Goto Top
Hallo Steffen,
ich habe es gewagt und eine neue Aufgabe gestellt.

Siehe: Mein PC "lacht mich aus"!

face-wink Dank Dir kann ich nun auf eine Frage hinweisen.

Nette Grüße

Bohu