Warum kann ich ein Chr(1) nicht verarbeiten?

22/11/2007 - 11:14 von Hans Otany | Report spam
Hallo,

ich nutze eine API Funktion um Laufwerksbuchstaben zu erfassen.
Die Function sieht folgendermassen aus:

...
Dim sDrives As String
Dim i As Integer
Dim test As Variant
Dim t1 As String
sDrives = Space$(255)

GetLogicalDriveStrings Len(sDrives), sDrives

test = Split(sDrives, Chr(1)) ' test = Split(sDrives, "") 'geht auch
nicht
MsgBox test(2)
...

der Inhalt von sDrives sieht so aus:
"A:\C:\E:\F:\G:\H:\I:\K:\O:\P:\S:\X:\Z:\
"
jetzt kommt immer ein Fehler: "Index ausserhalb des gueltigen Bereiches"
wenn ich den Bereich definiere kommt ein anderer Fehler.

Wenn ich nun:
test = Split(sDrives, Chr(1))
gegen
test = Split(sDrives, "\")
tausche, dann geht es ohne Fehler.

Das viereckige Zeichen ist definitiv ein Chr(1).

Wenn ich nun in einem anderen VB Projekt folgendes mache:

Dim s As String
Dim v As Variant
s = "Willi;Wacker;und;sein;Dackel"
v = Split(s, Chr(1)) '"")
MsgBox UBound(v) 'ergibt "4"
MsgBox v(1) 'ergibt "Wacker"

End Sub

Private Sub Command2_Click()
Text1.Text = Chr(1)
End Sub

Dann funktioniert auch alles und ich habe das Zeichen einfach kopiert.

Wie kann ich das Problem lösen, dass dieses Zeichen einfach nicht erkannt
wird?



Vielen Dank.

mfg Hans
 

Lesen sie die antworten

#1 Thomas Schremser
22/11/2007 - 11:24 | Warnen spam
Hallo Hans!

"Hans Otany" schrieb:

ich nutze eine API Funktion um Laufwerksbuchstaben zu erfassen.



[...]

der Inhalt von sDrives sieht so aus:
"A:\


C:\
E:\
F:\
G:\
H:\
I:\
K:\
O:\
P:\
S:\
X:\
Z:\


"
jetzt kommt immer ein Fehler: "Index ausserhalb des gueltigen Bereiches"
wenn ich den Bereich definiere kommt ein anderer Fehler.

Wenn ich nun:
test = Split(sDrives, Chr(1))
gegen
test = Split(sDrives, "\")
tausche, dann geht es ohne Fehler.

Das viereckige Zeichen ist definitiv ein Chr(1).



Das bezweifle ich jetzt mal.

API-Funktionen trennen üblicherweise mit Chr$(0), und laut Doku
(http://msdn2.microsoft.com/en-us/li...64975.aspx) macht
GetLogicalDriveStrings hier keine Ausnahme

Nimm also

test = Split(sDrives, Chr$(0))

oder gleich mit der entsprechenden Konstante

test = Split(sDrives, vbNullChar)

[...] ich habe das Zeichen einfach kopiert.



Ich nehm mal an, daß das Direktfenster hier ein anderes Zeichen ausgibt weil
das NUL-Zeichen nicht darstellbar ist.

HTH

Grüße
Thomas

Any problem in computer science can be solved with another layer
of indirection. But that usually will create another problem.
David Wheeler

Ähnliche fragen