|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
hhr
Anmeldungsdatum: 15.07.2020 Beiträge: 99
|
Verfasst am: 30.11.2020, 11:46 Titel: Umleitung mit Pipe |
|
|
a.bas:
Code: | Print "äöüßÄÖÜ"
Print
Print "@µ²³èéê"
Print "ÀÁÁÂÃÄÅ"
End
|
b.bas:
Code: | Dim As Long i
Dim As String a
Open Cons For Output As #1
Do
Line Input #1, a
Print #1, Wstr(a)
i += 1
Loop While i <= 3
Close #1
End
|
Beide Programme sind im selben Ordner gespeichert und kompiliert.
Wenn in der Eingabeaufforderung a aufgerufen wird, werden die Zeichen falsch dargestellt.
Wenn a|b aufgerufen wird, übernimmt b die Ausgabe und alle Zeichen werden richtig dargestellt.
Für den allgemeinen Fall stimmt die Abbruchbedingung in b aber nicht.
Es sieht so aus, als müsste Programm b erkennen, wann Programm a beendet ist.
Programm a darf nicht verändert werden. Man muss annehmen, dass es nur als a.exe vorliegt.
Hat jemand einen Tip? |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4609 Wohnort: ~/
|
Verfasst am: 30.11.2020, 20:56 Titel: |
|
|
Ich bin mir jetzt nicht sicher (ein bisschen müde zum Denken), aber könnte OPEN PIPE helfen? Will heißen, b.bas ruft über OPEN PIPE das Programm a.exe auf. Wenn ich mich recht erinnere, wird da das Programmende erkannt. OPEN CONS kann das Programmende meines Wissens nicht erkennen.
Sonst gäbe es noch die Möglichkeit, temporär die Zeichenkodierung der Konsole umzustellen, damit es kompatibel zu a.exe ist (ginge dann auch über ein Shell-Programm). Frag mich jetzt aber nicht, wie.
edit: Mein Test mit OPEN PIPE sah von der Abbruchbedingung her gut aus. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
hhr
Anmeldungsdatum: 15.07.2020 Beiträge: 99
|
Verfasst am: 30.11.2020, 22:30 Titel: |
|
|
So geht es. Danke.
Code: | Dim As String a
Chdir Exepath
Open Pipe "a.exe" For Input As #1
Do Until Eof(1)
Line Input #1, a
Print Wstr(a)
Loop
Close #1
'Getkey
End |
Gruß
hhr
Zuletzt bearbeitet von hhr am 03.12.2020, 20:55, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
hhr
Anmeldungsdatum: 15.07.2020 Beiträge: 99
|
Verfasst am: 01.12.2020, 22:07 Titel: |
|
|
Windows 7:
Code: | Dim As String s
Open Cons For Input As #1
Open Cons For Output As #2
Do Until Eof(1)
Line Input #1,s
Print #2,s
Loop
Close
End |
Windows XP:
Code: | #include "windows.bi"
Dim As String s
Open Cons For Input As #1
Open Cons For Output As #2
Do Until Eof(1)
Line Input #1,s
CharToOem(s,s)
Print #2,s
Loop
Close
End |
Windows XP, Windows 7:
Code: | #include "windows.bi"
Dim As String s
Open Cons For Input As #1
Open Cons For Output As #2
Do Until Eof(1)
Line Input #1,s
CharToOemBuff(s,s,Len(s))
SetConsoleCP(GetACP)
Print #2,s
SetConsoleCP(GetOEMCP)
Loop
Close
End |
Wenn diese drei Programme für sich gestartet werden, warten sie auf Eingabe und können mit Strg+C oder Strg+Break abgebrochen werden.
Die letzten beiden Programme funktionieren auch mit sort und more: a|b|sort|more.
a.exe und b.exe können auch über ein FreeBasic-Programm verbunden werden:
pipe a b
pipe.bas:
Code: | Dim As String s
Open Pipe Command(1) For Input As #1
Open Pipe Command(2) For Output As #2
Do Until Eof(1)
Line Input #1,s
Print #2,s
Loop
Close
End |
https://www.freebasic-portal.de/projekte/openbook-einsteigerhandbuch-99.html, 16.6 Standard-Datenströme |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|