Seite 2 von 2

Re: RunProgram und ReadProgramString will nicht funktioniere

Verfasst: 22.01.2017 17:35
von ts-soft
Da scheint es noch einen Bug zu geben, im Compiler-Modus ASCII funktioniert es, in Unicode nicht.

Re: RunProgram und ReadProgramString will nicht funktioniere

Verfasst: 22.01.2017 18:12
von helpy
Ich habe das mal bei mir ausprobiert.
Es scheint so, dass ping die Zeichen in OEM 852 Codierung zurückgibt.

Deshalb sollte man wohl eher "ReadProgramString(TestProg, #PB_ASCII)" verwenden und danach müsste man das Ergebnis entsprechend umwandeln!

==> https://de.wikipedia.org/wiki/Codepage_852

Es kann aber sein, dass auf anderen PCs eine andere Codepage für die Konsole eingestellt ist.
Das sollte man dann wohl auch berücksichtigen.

lg,
guido

Re: RunProgram und ReadProgramString will nicht funktioniere

Verfasst: 22.01.2017 18:26
von Beefi
Hi helpy,
Deshalb sollte man wohl eher "ReadProgramString(TestProg, #PB_ASCII)" verwenden und danach müsste man das Ergebnis entsprechend umwandeln!
Gibt es dafür eine einfache Methode/Funktion?

Was spricht eigentlich gegen die Funktion OemToChar_()? Es funktioniert damit ja einwandfrei, nur muss man mit "ReadProgramString(TestProg, #PB_Unicode)" auslesen.

Re: RunProgram und ReadProgramString will nicht funktioniere

Verfasst: 22.01.2017 18:46
von ccode_new
Hallöchen!!!

Hier mal meine ein paar Tests bei mir.

OemToChar_() ist bei mir immer fehlerhaft und bringt nichts - Außer einen Absturz des Programms !!!!

Test1:
Bild

Die Ausgabe (Test1):
Bild

Test2:
Bild

Die Ausgabe (Test2):
Bild

Test3 (Unicode): Hier mit OemToChar_() !!!
Bild

Tja, Bug hin oder her, hier müsste man vorher über eine API die befindliche Code-Tabelle prüfen.

Es scheint je nach Rechner hier Unterschiede zugeben.

Re: RunProgram und ReadProgramString will nicht funktioniere

Verfasst: 22.01.2017 19:03
von Beefi
Hi ccode_new,

jetzt weiß ich, warum wir unterschiedliche Ergebnisse haben. Du verwendest das ältere PureBasic 5.42, ich jedoch die Version 5.51.
Unicode wurde hier auch komplett entfernt...ich habe auch nicht mehr die Compiler-Option "Unicode-Executable erstellen" (zumindest in der IDE), da es immer Unicode ist.

Stürzt OemToChar_() auch ab, wenn du mit #PB_Unicode einließt?

Re: RunProgram und ReadProgramString will nicht funktioniere

Verfasst: 22.01.2017 19:30
von Beefi
So, ich habe jetzt Purebasic 5.51 runtergehauen und die neue LTS 5.44 installiert. Damit funktioniert fast alles einwandfrei.

Ich habe jetzt zwei Möglichkeiten bei ReadProgramString():

1. Compiler auf Unicode:
Hier muss ich die Konsole mit #PB_Unicode auslesen und OemToChar_() umwandeln...dann sind alle Umlaute korrekt.

2. Compiler auf Ascii:
Hier kann man einfach mit #PB_Ascii (oder eben keinem Parameter) auslesen und alle Umlaute sind korrekt.


Bei ReadProgramError() muss ich bei Punkt 1 weiterhin zwingend ein Delay in der Schleife setzen, sonst stürzt das Programm ab.
Im Ascii-Modus funktioniert auch hier alles einwandfrei (ohne Delay).

Was habe ich jetzt für Vor- und Nachteile, wenn ich den Compiler auf Ascii oder Unicode stelle?

Re: RunProgram und ReadProgramString will nicht funktioniere

Verfasst: 22.01.2017 19:32
von ccode_new
OemToChar_() stürzt bei mir nur bei fehlerhalften/keinen Unicode ab.

Dieser Code liest eine Unicode-Datei mit folgenden Text ein:
@€{[]▲▲►►ὢ

Это тест.
Hierbei stürzt das OemToChar_ nicht ab, weil Unicode übergeben wird.
Aber die Ausgabe ist mit OemToChar_ fehlerhaft und ohne OemToChar_ korrekt.
Daher ist OemToChar_ bei mir Sinnlos!!!

Code: Alles auswählen

Global Text1.s
Global Text2.s

OpenConsole()
If ReadFile(0, "E:\Unicode_Test.txt")
  While Eof(0) = 0
      Text1 = ReadString(0,#PB_Unicode)
      Text2 = Space(Len(Text1))
      OemToChar_(Text1, Text2)
      PrintN(Text2)
    Wend
    CloseFile(0)
  Else
    MessageRequester("Information","Konnte Datei nicht öffnen!")
  EndIf
Input()
CloseConsole()

Re: RunProgram und ReadProgramString will nicht funktioniere

Verfasst: 22.01.2017 19:34
von Beefi
Jetzt haben wir überkreuzt geschrieben :)
OemToChar_() ist bei dir sinnlos, weil du den Compiler wohl auf Ascii gestellt hast.
Früher oder später muss man sich wohl auf Unicode einstellen, wenn Ascii in den nächsten Versionen schon gestrichen ist.

Re: RunProgram und ReadProgramString will nicht funktioniere

Verfasst: 22.01.2017 19:55
von ccode_new
OemToChar_ funktioniert bei mir unter PB 5.42 LTS mit "Unicode"-Einstellung und ohne dieser Einstellung nicht.

Das ist vollkommen egal. OemToChar_ liefert bei mir nie eine korrekte Ausgabe, weil wahrscheinlich nie eine korrekte Eingabe kommt.