Ich habe folgendes Problem. Ich versuche gerade, mit Hilfe von Pandoc aus PureBasic heraus verschiedene Markup-Formate untereinander zu konvertieren. Dazu kann Pandoc von STDIN lesen und über STDOUT antworten. Das kommt mir gelegen, damit ich nicht für jeden Vorgang Dateien schreiben muss. Nun habe ich aber das Problem, das Pandoc die Eingaben, die ich per WriteProgramString sende, unendlich lang entgegennimmt (Mit einer Forever-Schleife getestet - RAM-Auslastung nahm stetig zu - Bei einmaliger Eingabe war sie konstant). Dadurch sendet Pandoc mir das HTML, das es aus Markdown erzeugen soll, nicht zurück. Mache ich es direkt über die Komandozeile und beende den Strom mit STRG+Z und danach Enter, bekomme ich die Ausgabe. Auch das einlesen über STDIN über Konsole und Dateieingabe klappt.
Meine Vermutung daher ist, das es am fehlendem EOF liegt. Nun habe ich schon mit Chr(4) versucht, EOT zu senden. Das klappt aber nicht. Auch SUB (26) zeigt keine Wirkung genauso wie 0. Wenn ich statt der Konvertierung nur die Liste der Formate abfrage, bekomme ich per STDOUT eine Liste. Auch das scheint zu klappen. Nur wenn ich über mein Programm den String ans STDIN sende, bekomme ich es nicht hin. Wie sende ich also EOF an STDIN? Kann mir da wer helfen?
Einmal der Code:
Code: Alles auswählen
EnableExplicit
OpenConsole()
Define.l PanDoc
Define.s MarkdownString
MarkdownString = "# Das ist eine Ueberschrift #" + Chr(13)
MarkdownString + "Das ist eine Zeile mit *hervorgehobenen* Wort!" + Chr(13)
MarkdownString + "So geht es!"
PanDoc = RunProgram("C:\Program Files (x86)\Pandoc\pandoc", "-f markdown -t html", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Write)
If PanDoc
Delay(500)
WriteProgramString(PanDoc, MarkdownString, #PB_UTF8)
WriteProgramString(PanDoc, Chr(4), #PB_UTF8)
While ProgramRunning(PanDoc)
If AvailableProgramOutput(PanDoc)
Print(ReadProgramString(PanDoc, #PB_UTF8))
EndIf
Wend
EndIf
Input()