RunProgram und ReadProgramString will nicht funktionieren

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: RunProgram und ReadProgramString will nicht funktioniere

Beitrag von ts-soft »

Da scheint es noch einen Bug zu geben, im Compiler-Modus ASCII funktioniert es, in Unicode nicht.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
helpy
Beiträge: 635
Registriert: 29.08.2004 13:29

Re: RunProgram und ReadProgramString will nicht funktioniere

Beitrag 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
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Beefi
Beiträge: 88
Registriert: 16.01.2017 17:38

Re: RunProgram und ReadProgramString will nicht funktioniere

Beitrag 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.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: RunProgram und ReadProgramString will nicht funktioniere

Beitrag 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.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Beefi
Beiträge: 88
Registriert: 16.01.2017 17:38

Re: RunProgram und ReadProgramString will nicht funktioniere

Beitrag 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?
Beefi
Beiträge: 88
Registriert: 16.01.2017 17:38

Re: RunProgram und ReadProgramString will nicht funktioniere

Beitrag 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?
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: RunProgram und ReadProgramString will nicht funktioniere

Beitrag 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()
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Beefi
Beiträge: 88
Registriert: 16.01.2017 17:38

Re: RunProgram und ReadProgramString will nicht funktioniere

Beitrag 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.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: RunProgram und ReadProgramString will nicht funktioniere

Beitrag 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.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Antworten