Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Umleitung mit Pipe

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
hhr



Anmeldungsdatum: 15.07.2020
Beiträge: 84

BeitragVerfasst am: 30.11.2020, 10:46    Titel: Umleitung mit Pipe Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 30.11.2020, 19:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
hhr



Anmeldungsdatum: 15.07.2020
Beiträge: 84

BeitragVerfasst am: 30.11.2020, 21:30    Titel: Antworten mit Zitat

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, 19:55, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
hhr



Anmeldungsdatum: 15.07.2020
Beiträge: 84

BeitragVerfasst am: 01.12.2020, 21:07    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz