Komisches Problem

05/10/2016 - 20:17 von Lothar Geyer | Report spam
Ich habe eine Routine, die mir in einem Dateinamen alle ungültigen
Zeichen durch ein _ ersetzt. Làuft seit Jahren ohne Probleme. Nun habe
ich einen Fall, bei dem ein ? nicht ersetzt wird. Die Routine lautet (im
Wesentlichen):

Public Function EnabledFileName(FileName As String) As String
Const IllChr As String = "\/:*?""<>|"
Dim tS As String
Dim ii As Integer

On Error GoTo errHandler

tS = FileName
' alles auf ASCII setzen
For ii = 1 To Len(FileName)
If Mid$(tS, ii, 1) < " " Or Mid$(tS, ii, 1) = "~" Then
tS = Left$(tS, ii - 1) & "_" & Mid$(tS, ii + 1)
End If
Next ii
' die ungültigen ASCIIs auch noch weg
For ii = 1 To Len(IllChr)
tS = Replace$(tS, Mid$(IllChr, ii, 1), "_")
Next ii
EnabledFileName = tS

Exit Function

End Function

Der Dateiname, der nicht korrekt bearbeitet wird, lautet

Provisionsabrechung f?r Franziska Montag.pdf

Mit dem Debugger kann ich mir das ? anzeigen lassen:

?mid$(filename,22,1)

Ich kann auch

?asc(mid$(filename,22,1))

abrufen und erhalte 63, ist also gleich asc("?").

Trotzdem wird in der zweiten Schleife das ? nicht durch ein _ ersetzt -
und in Folge kann die Datei nicht gespeichert werden.

Hat irgendjemand eine Idee?

Vielleicht noch eine Hintergrund-Information: es handelt sich um einen
Anhang zu einer E-Mail. Der Name der Datei ist UTF-encoded. Beim
codieren ist im Sendeprogramm offenbar ein Fehler passiert. Im
Thunderbird wird auch ein komisches ? angezeigt - aber die Datei kann
gespeichert werden, wobei der Name an der entsprechenden Stelle dann
anstelle des ? ein kleines Rechteck enthàlt.

Lothar Geyer
 

Lesen sie die antworten

#1 Wolfgang Wolf
06/10/2016 - 07:54 | Warnen spam
Am 05.10.2016 um 20:17 schrieb Lothar Geyer:
Provisionsabrechung f?r Franziska Montag.pdf



Hallo Lothar,

dein Code funktioniert. Also zumindest wenn ich den Dateinamen aus
deiner Mail verwende.

Könntest die Sache aber auch anders herum angehen. Mache statt der
Negativ-Liste eine Positiv-Liste, in der alle erlaubten Zeichen stehen.
Der Geschwindigkeitsverlust ist zu vernachlàssigen, schließlich wirst du
kaum mehr als eine Handvoll Anhànge in einer Mail haben. Dann sollte
alles was unerlaubt ist durch das "_" ersetzt werden, auch das ominöse
"?" oder was auch immer dahinter steckt.

Sollte es am Replace$ liegen, kannst dieses auch relativ einfach durch
eine MId-Anweisung ersetzen.

Oder Du baust den Dateiname ganz neu auf, nach folgendem Muster:

for i=1 to len(dateiname)
if instr(positivliste, mid$(dateiname,i,1)) then
EnabledFileName = EnabledFileName & mid$(dateiname,i,1)
else
EnabledFileName = EnabledFileName & "_"
end if
next i

Schönen Gruß
W. Wolf

Ähnliche fragen