Forums Neueste Beiträge
 

Textdateien für alte DOS-Anwendungen erzeugen

03/12/2007 - 11:56 von Alex_B | Report spam
Hallo,

ich erzeuge in einer VB6-Anwendung eine Textdatei auf folgende Weise:

intFileNo = FreeFile
Open strDateiName For Output As intFileNo

Die ist soweit auch in Ordnung. Sie làsst sich beispielsweise in Notepad
problemlos öffnen und darstellen.

Nun soll eine andere DOS-Anwendung diese Datei zum Importieren zugrunde
legen. Dabei zeigt sich, dass Umlaute nicht korrekt übernommen werden.

Hat jemand eine Idee, was man da machen kann?
Habe ich unter VB6 die Möglichkeit, das Textdateiformat zu beeinflussen?

Vielen Dank für jeden Hinweis.

Viele Grüße
Alexander Braeumer
 

Lesen sie die antworten

#1 Thorsten Albers
03/12/2007 - 13:55 | Warnen spam
Alex_B schrieb im Beitrag
...
ich erzeuge in einer VB6-Anwendung eine Textdatei auf folgende Weise:
intFileNo = FreeFile
Open strDateiName For Output As intFileNo

Nun soll eine andere DOS-Anwendung diese Datei zum Importieren zugrunde
legen. Dabei zeigt sich, dass Umlaute nicht korrekt à¼bernommen werden.
Hat jemand eine Idee, was man da machen kann?
Habe ich unter VB6 die Möglichkeit, das Textdateiformat zu beeinflussen?



Ja, natürlich: Du schreibst ja schließlich selbst die Daten in die
Textdatei!

Nehmen wir 'mal an, Du hast die Textdaten in 'MyString'. Dann gibt es
folgende Möglichkeiten:

1. Du gehst mit einer Schleife durch den gesamten String (For Pos = 1 To
Len(MyString)) und ersetzt jedes Zeichen (Char = Mid$(MyString, Pos, 1))
mit einem 'Windows-Zeichencode' > 127 (Asc(Char) > 127) durch den
entsprechenden 'DOS-Zeichencode' (Mid$(MyString, Pos, 1) Chr$(Zeichencode)).

2. Du làßt das durch die Windows-API-Funktion CharToOemBuff() machen, wobei
die derzeit im System eingestellte DOS-Zeichencodetabelle (Codepage)
verwendet wird - in einem deutschen Windows ist das üblicherweise die
Codepage 850 'Multilingual'.

Private Declare Function CharToOemBuff _
Lib "user32" _
Alias "CharToOemBuffA" _
( _
ByVal pszSource As String, _
ByVal pDestination As String, _
ByVal lDestinationLength As Long _
) As Long

Bsp.:
Call CharToOemBuff(ByVal MyString$, ByVal MyString$, Len(MyString))

3. Du làßt das durch die Windows-API-Funktion WideCharToMultiByte() machen,
wobei Du gewisse Variationsmöglichkeiten in der Zeichencodetabelle und
anderen Parametern hast.

Private Declare Function WideCharToMultiByte Lib "kernel32" _
( _
ByVal lCodePage As Long, _
ByVal lFlags As Long, _
pStrWideChar As Any, _
ByVal lLenStrWideChar As Long, _
pStrMultiByte As Any, _
ByVal lLenStrMultiByte As Long, _
pStrDefaultChar As Any, _
pfDefaultCharUsed As Any _
) As Long

Bsp.:
Const CODEPAGEID_DOS_MULTILINGUAL As Long = 850

Dim NewString As String
Dim Count As Long

Count = WideCharToMultiByte(CODEPAGEID_DOS_MULTILINGUAL, 0, _
ByVal StrPtr(MyString), Len(MyString), _
ByVal 0&, 0, _
ByVal 0&, ByVal 0&)
If Count = 0 Then
' -> Fehler, z.B. Zeichencode-Tabelle 850 nicht installiert
Else
NewString = String$(Count, vbNullChar)
Count = WideCharToMultiByte(CODEPAGEID_DOS_MULTILINGUAL, 0, _
ByVal StrPtr(MyString), Len(MyString), _
ByVal NewString$, Count, _
ByVal 0&, ByVal 0&)
If Count = 0 Then
' -> Irgendetwas ist schiefgelaufen
End If
End If


Das ganz ist online und schematisch geschrieben. Anpassungen können ggfs.
erforderlich sein.

-
THORSTEN ALBERS Universitàt Freiburg
albers@
uni-freiburg.de
-

Ähnliche fragen