FileSystemObject stolpert ueber Null-Bytes

22/10/2012 - 02:47 von Christoph Schneegans | Report spam
Hallo allerseits!

Ich habe ein Problem mit VBScript-Code und hoffe, daß ich hier in
der richtigen Gruppe bin. Eine passendere Gruppe scheint es in de.*
jedenfalls nicht zu geben.

Ich möchte mit dem FileSystemObject eine Log-Datei einlesen. Die
Datei ist leider ein wenig kaputt; nach der letzten "richtigen"
Zeile kommt noch ein Zeilenumbruch (0x0D 0x0A) und dann noch etwa
50.000 Null-Bytes (0x00).

Man sollte also annehmen, daß dieser VBScript-Code einen leeren
Meldungstext anzeigt:

set fso = CreateObject("Scripting.FileSystemObject")
set ts = fso.OpenTextFile("C:\my\Logfiles\all\ex070616.log")
do until ts.AtEndOfStream
line = ts.ReadLine
loop
MsgBox Replace(line, ChrW(0), "")
ts.Close

Tatsàchlich sieht man aber einen kurzen Text, der bspw. die Zeichen
'Ā' (U+0100) oder 'д' (U+0434) enthàlt. Offenbar gibt also der
letzte Aufruf von .ReadLine einen String zurück, der neben ChrW(0)
auch ein paar andere Zeichen enthàlt.

Nach dem letzten Zeilenumbruch kommen garantiert ausschießlich Null-
Bytes, das habe ich mit einem Hex-Editor geprüft. Außerdem ist die
Log-Datei ANSI- bzw. Windows-1252-codiert, und entsprechend rufe ich
OpenTextFile() mit nur einem Parameter auf. Windows-1252 kann aber
weder 'Ā' noch 'д' codieren, so daß diese Zeichen gar nicht
entstehen dürften, auch wenn die Datei beliebige andere Bytes
enthielte.

Ich habe außerdem den Eindruck, daß die Ausgabe gar nicht
deterministisch ist, obwohl die Log-Datei sich garantiert nicht
geàndert hat. Ich höre aber lieber auf zu testen, bevor ich völlig
den Verstand verliere. ;-)

Kann sich darauf jemand einen Reim machen? Meine scrrun.dll hat die
Version 5.7.0.18066. Eine neuere habe ich nicht zum Download
gefunden.

<http://schneegans.de/sv/> · Schema-Validator für XML
 

Lesen sie die antworten

#1 Wolfgang Badura
22/10/2012 - 08:22 | Warnen spam
Hallo Christoph!
"Christoph Schneegans" schrieb im Newsbeitrag
news:

Ich möchte mit dem FileSystemObject eine Log-Datei einlesen. Die
Datei ist leider ein wenig kaputt; nach der letzten "richtigen"
Zeile kommt noch ein Zeilenumbruch (0x0D 0x0A) und dann noch etwa
50.000 Null-Bytes (0x00).



Also ich bin ziemlich sicher, daß sich nicht das fso verheddert, sondern der
Log-File defekt ist.
Wie groß ist er denn. Merh als 50000 bytes?

MsgBox Replace(line, ChrW(0), "")



Warum verwendest Du ChrW und nicht Chr?

Tatsàchlich sieht man aber einen kurzen Text, der bspw. die Zeichen
'A' (U+0100) oder '?' (U+0434) enthàlt.



Ich wàre nicht so sicher, daß der Logfile ausschließlich Windows-1252
codiert ist.
da kann doch auch etwas bei der Erstellung schiefgelaufen sein.

Vielleicht kannst Du, wenn er kein Geheimnistràger ist, den Logfiel irgendwo
hochladen.

Wolfgang

Ähnliche fragen