ANSI<->OEM:Directory()/XbpFileDialog()/File()/M$ Media

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

ANSI<->OEM:Directory()/XbpFileDialog()/File()/M$ Media

Beitrag von AUGE_OHR »

hi,

i habe Probleme mit German "Umlaute" am Beispiel : SCHÖN.MP3

mit Directory() erhalte ich Zeile 1 der Anlange ... sieht nicht schÖn aus

Code: Alles auswählen

aDir := Directory("*.MP3")
cFile := aDir[1][F_NAME]
? FILE(cFile)             -> .T.
oPlayer:URL := cFile  -> aber der Player startet NICHT
dann hab ich ConvToOemCP() benutzet die Zeile 2 .. sieht schÖn aus, aber

Code: Alles auswählen

cFile :=  ConvToOemCP(aDir[1][F_NAME])
? FILE(cFile)              -> .F.
oPlayer:URL := cFile  -> OK Player startet jetzt
nun hab ich XbpFileDialog genommen siehe Zeile 3
! Achtung : Zeile 1 sieht anders aus als Zeile 3

Code: Alles auswählen

cFile := XbpFileDialog(....)
? FILE(cFile)             -> .T.
oPlayer:URL := cFile  -> aber Player startet wieder NICHT
in Zeile 4 hab ich dann wieder ConvToOemCP() benutzt

Code: Alles auswählen

cFile := XbpFileDialog(....)
cFile := ConvToOemCP(cFile)
? FILE(cFile)              -> .F.
oPlayer:URL := cFile  -> OK Player startet
so was ist der Unterschied in Zeile 1 vs. Zeile 3

wie cann ich File() zusammen mit ConvToOemCP() benutzten
damit mein "Player" startet UND File() = .T. zurÜck gibt ? ( Line 2/4)

gruss by OHR
Jimmy

[img]
file://C:\BRIEFE\SCHÖN.JPG
[/img]
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Jimmy,
bezüglich Deines Versuches, eine Grafik anzuhängen: sie muss auf einem Server im Internet bereitgestellt werden - nicht auf Deinem lokalen PC!
Aber nun zu Deiner Frage:
Wie wäre es denn damit?

Code: Alles auswählen

cFile := XbpFileDialog(....) 
cFile := ConvToOemCP(cFile) 
? FILE(ConvToAnsiCP(cFile))
oPlayer:URL := cFile
oder

Code: Alles auswählen

cFile := XbpFileDialog(....) 
? FILE(cFile)
oPlayer:URL := ConvToOemCP(cFile)
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

wenn du kein Konsolenprogramm brauchst (was ich hier nicht denke), dann ist es am einfachsten komplett auf ANSI umzustellen:

1. set charset to ANSI
2. KEINEN Kompilerschalter für Konvertierung nutzen
3. Quellcode in Ansi eingeben (notepad zeigt diesen richtig an)
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

brandelh hat geschrieben:Hallo,
dann ist es am einfachsten komplett auf ANSI umzustellen:
1. set charset to ANSI
geht das mit SET COLLATION TO GERMAN (äüö hinter z ) ?
2. KEINEN Kompilerschalter für Konvertierung nutzen
3. Quellcode in Ansi eingeben (notepad zeigt diesen richtig an)
ok aber was ich nicht weiss : was ist mit den Daten der DBF ?

in der DBF möchte ich ASCI - OEM haben, da ich auch mit Cl*pper
zugeifen (können) möchte und ich will auch die deutschen Umlaute
haben. dumm ist nur das FILE("SCHÖN.MP3") leider .F. ergibt und
ich jedesmal FILE(ConvToAnsiCP("SCHÖN.MP3))) benutzten muss.

... eigendlich sollte FILE("SCHÖN.MP3") doch auch .T. ergeben ...:(

gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

Martin Altmann hat geschrieben:Hallo Jimmy,
bezüglich Deines Versuches, eine Grafik anzuhängen: sie muss auf einem Server im Internet bereitgestellt werden - nicht auf Deinem lokalen PC!
jau ... warten wir auf TOM
Aber nun zu Deiner Frage:
Wie wäre es denn damit?

Code: Alles auswählen

cFile := XbpFileDialog(....) 
cFile := ConvToOemCP(cFile) 
? cFile FILE(ConvToAnsiCP(cFile))
oPlayer:URL := cFile
ja genau das hab ich jetzt ... aber ich musste alle FILE()
abgrasen ...
oder

Code: Alles auswählen

cFile := XbpFileDialog(....) 
? FILE(cFile)
oPlayer:URL := ConvToOemCP(cFile)
im Prinzip ja, aber da ich auch cFile "darstelle" muss ich gleich am
Anfang cFile := ConvToOemCP(cFile) machen die dann auch der
M$ "Player" braucht ...

WARUM (Alaska-Software) gibt FILE("SCHÖN.MP3") bloss .F. zurück
und FILE(ConvToAnsiCP("SCHÖN.MP3")) funktioniert ... :(

danke, gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Jimmy,
AUGE_OHR hat geschrieben:WARUM (Alaska-Software) gibt FILE("SCHÖN.MP3") bloss .F. zurück
und FILE(ConvToAnsiCP("SCHÖN.MP3")) funktioniert ... :(
ich meine gelesen zu haben, dass das bei den Alaska-Dateibefehlen so ist. Sie funktionieren wohl nur mit ANSI-Dateinamen richtig, da ja auch Windows ein ANSI-"lastiges" Betriebssystem ist.
Also entweder keine Sonderzeichen in den Dateinamen (ASCII==ANSI), oder halt Parameter als ANSI-Zeichenkette an die Dateibefehle übergeben.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

Martin Altmann hat geschrieben: ich meine gelesen zu haben, dass das bei den Alaska-Dateibefehlen so ist. Sie funktionieren wohl nur mit ANSI-Dateinamen richtig, da ja auch Windows ein ANSI-"lastiges" Betriebssystem ist.
ja ist schon richtig ...
Also entweder keine Sonderzeichen in den Dateinamen (ASCII==ANSI), oder halt Parameter als ANSI-Zeichenkette an die Dateibefehle übergeben.
naja dass die User "Sonderzeichen" (= Umlaute) benutzen kann man
kaum verhindern. Wenn man dann wie ich auch noch Cl*pper benutzt
muss man die DBF in OEM halten.

nun hab ich aber z.b. eine Routine um "Datei Leichen" in der DBF zu
finden : IF .NOT. FILE (MP3DBF->FULLPATH) ; DELETE ... PACK
und da hat er mir "reichlich" rausgelöscht.

ich "denke" immer noch in Cl*pper und das ist so nicht "kompatible",
oder ?

gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

Xbase++ ist eine Win32 Anwendung, also funktionieren alle Dateizugriffe erstmal ohne Umsetzung nur in ANSI !

Lies hierzu mal im Handbuch
'SET CHARSET - Standard Zeichensatz einstellen'

da gibt es wichtige Infos zu den automatischen Konvertierungen.

DBE-DBFNTX speichert z.B. immer in ASCII (IBM/OEM/PC8/Clipper/DOS) Zeichensatz, während FOXCDX dies bei der Erstellung nach SET CHARSET festlegt.

Bei der Eingabe des Textes im Editor (ANSI/ASCII-OEM) bzw. mit den Compilerschaltern
/ga Literale Zeichen nach ANSI konvertieren
/go Literale Zeichen nach OEM konvertieren
erhöht man die Fehlerchancen nochmal, alles spielt zusammen.

Eine deutsche Version verhält sich mit OEM Texten exakt wie Clipper, aber dort übernimmt die CMD Box die Konvertierung der Dateinamen nach OEM und zurück. Bei den für Dich nötigen Grundeinstellungen solltest du dir eine eigene Funktion schreiben:

Code: Alles auswählen

procedure main()
cls
? set(_SET_CHARSET ), "OEM"
? file("Testš.txt"),MyFile("Testš.txt")  // Text im Editor als OEM eingegeben
set charset to ansi
? set(_SET_CHARSET ), "ANSI"        // Text im Editor als ANSI eingegeben
? file("TestÜ.txt"),MyFile("TestÜ.txt")
inkey(0)
return

function myFile(cDatei)
    if set(_SET_CHARSET)=1  // OEM
       cDatei := convToAnsiCP(cDatei)
    endif
return file(cDatei)
dass im obigen aufrufenden Programm die Umlaute seltsam aussehen, liegt daran, dass mit einem Programm ANSI und OEM Aufrufe ausgeführt werden. Aber das Ergebnis zeigt, dass die Funktion immer den richtigen Wert zurückgibt (2. Spalte):
1 OEM
N J
0 ANSI
J J
Gleiches gilt für die Fileauswahl. Ich hatte die Probleme verstärkt, als ich noch auf OS/2 Kompatibilität achtete, dort herrscht auch OEM ASCII.

Heute fange ich neue Programme nur noch mit ANSI und FOXCDX an ...
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,

danke erstmal für die Erklärungen
brandelh hat geschrieben: DBE-DBFNTX speichert z.B. immer in ASCII (IBM/OEM/PC8/Clipper/DOS) Zeichensatz, während FOXCDX dies bei der Erstellung nach SET CHARSET festlegt.
... das hab ich doch auch mal gewusst ... und irgendwie bin ich bei CDX
gelandet ... da war doch was ...
Gleiches gilt für die Fileauswahl. Ich hatte die Probleme verstärkt, als ich noch auf OS/2 Kompatibilität achtete, dort herrscht auch OEM ASCII.
bei XbpFileDialog bekomme ich (immer) ANSI zurück,
dito bei "Dragdrop". soweit sogut aber ...

em, äh ... nochmals die Nachfrage : SET CHARSET ist default OEM,
also erfolgt nur zwischen der "Runtime" OEM <-> ANSI GUI "Display"
eine automatische Convertierung (nur von DBF Daten ?)

setzte ich SET CHARSET TO ANSI so erfolgt zwischen "Data" OEM
<-> und "Runtime" ANSI die Convertierung.

wenn alles bisher richtig, dann verstehe ich nicht wieso bei "default"
OEM eine FILE(myAlias->TEXT) ein .F. gibt , bei "Umlauten", wenn
zwischen "Data" OEM und "Runtime" OEM gar nicht passiert ... ?

Nachtrag : oder ist der "Dateiname C:\SCHÖN.TXT" mit dem "Ö"
gar nicht OEM (sieht nur so aus ...) sondern tatsächlich ANSI ?
Heute fange ich neue Programme nur noch mit ANSI und FOXCDX an ...
ich muss mir dazu nochmal in Ruhe den Rest deiner Msg ansehen
und mir überlegen ob ich die GUI auch in "data" ANSI mache und
dann eben langsam auf meine (heiss geliebten ) Cl*pper "Utils"
verzichte ...

thx nochmal für deine Tips
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Guten Morgen Jimmy,
AUGE_OHR hat geschrieben:naja dass die User "Sonderzeichen" (= Umlaute) benutzen kann man
kaum verhindern. Wenn man dann wie ich auch noch Cl*pper benutzt
muss man die DBF in OEM halten.
Du haust da gerade etwas durcheinander: Es geht nicht um die Inhalte der Datenbanken, sondern nur um die Dateinamen als Parameter für die Dateifunktionen!
Du kannst also Deine Einstellungen alle so lassen, wie sie sind - nur die Parameter für die Dateifunktionen musst Du halt in ANSI wandeln - und das braucht ja auch erst bei der Übergabe an die Dateifunktionen zu passieren.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

AUGE_OHR hat geschrieben:em, äh ... nochmals die Nachfrage : SET CHARSET ist default OEM, also erfolgt nur zwischen der "Runtime" OEM <-> ANSI GUI "Display" eine automatische Convertierung (nur von DBF Daten ?)
setzte ich SET CHARSET TO ANSI so erfolgt zwischen "Data" OEM
<-> und "Runtime" ANSI die Convertierung.
Lies bitte nochmals den von mir erwähnten Hilfetext zu set charset durch.

Konvertierungen werden automatisch zwischen DBF (DBFNTX immer OEM, FOXCDX kommt auf Erstellung an), dem Quellcode beim Compilieren (je nach Compilerschalter und Quellcodeformat) dem RAM und der Anzeige (GUI =Xbp oder Consolenanzeige) vorgenommen.

NIE jedoch bezüglich der Dateinamen oder Betriebssystemfunktionen.
In der Resource hatte ich z.B. ein (c) in OEM definiert und in den Eigenschaften der Exe wird ein (r) angezeigt ...

Clippertools sollte man auf Xbase++ umstellen, muss ich mit DBU allerdings auch noch machen, da ausschließlich DBFNTX Dateien mit kurzen Namen damit bearbeitet werden können.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
Martin Altmann hat geschrieben: Du haust da gerade etwas durcheinander: Es geht nicht um die Inhalte der Datenbanken, sondern nur um die Dateinamen als Parameter für die Dateifunktionen!
Du kannst also Deine Einstellungen alle so lassen, wie sie sind - nur die Parameter für die Dateifunktionen musst Du halt in ANSI wandeln - und das braucht ja auch erst bei der Übergabe an die Dateifunktionen zu passieren.
yup das hab ich nun kapiert.

da ich immer noch sehr Cl*pper lastig denke stellt sich aber noch
die Frage ob sich Xbase++ damit Cl*pper compatible verhält ?

"richtig" wäre es ja, bei OEM (set charset "default"), wenn "alle"
DateiFunktionen und Xbparts auch OEM zurückgeben würden
und sich das nicht nur auf die Datenbanken bezieht.

nun muss ich in allen meinen Xbase++ Applicationen die FILE()
und Directory() Functionen überprüfen ob ich da in Probleme
kommen kann ... :(

danke für die Zeit und Mühe
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

sicherlich hätte auch Xbase++ die Abfrage meiner Funktion direkt berücksichtigen können ... aber ich denke nicht, dass sich da was tut.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
brandelh hat geschrieben: Clippertools sollte man auf Xbase++ umstellen, muss ich mit DBU allerdings auch noch machen, da ausschließlich DBFNTX Dateien mit kurzen Namen damit bearbeitet werden können.
mit "Cl*pper Tool" meine leider "nicht von mir" geschriebene
Programme die aber nur mit NTX arbeiten.

DBU hab ich eine neue DBESYS.PRG verpasst und mit BRO.EXE
kann ich auch noch auf "Comix" DBF/FPT zugreifen.

danke für die Hilfe
gruss by OHR
Jimmy
Antworten