Приветствую.
Впал в жуткое недоразумение вот по какому вопросу:
Сразу говорю: Вижуал бейсик:
На сервере лежит текстовый файл, который я извлекаю в переменную и пытаюсь записать на диск.
Система выдаёт: Invalid procedure call or argument на Write объекта FileSystemObject.
Хм.... Теперь пишу посимвольно. Реакция: слетает на символе "?", указывая его код 63 (программно повотчил)
Смотрю оригинал на сервере и что записалось локально: мы запоролись на символе с кодом 178. Прога его не видит, признавая за "?" Причём, попытка сравнить с самим "?" или его кодом,или даже с кодом 178 ни к чему не привела...
Всякие S = Replace(S, Chr(178), "²") и S = Replace(S, Chr(63), "?") не делают погоду вообще.
For i = 1 To Len(S)
w = Mid(S, i, 1)
q = Asc(w)
If q = 63 Then' Сюдым мы в условии попали
w = Replace(w, Chr(63), "?") ' не заменилось!!!If w <> Chr(Asc(w)) Then MsgBox"НЕ РАВНО!!!"End If
ToSave.Write w ' тут мы стопоримся на ошибке "Invalid procedure call or argument".Next
Символ не равен самому себе, преобразованному в его код и обратно в символ!!!
причём: Asc(w) выдаёт 63...
Копипаст влоб символа из оригинала при сравнении даёт положительный результат...
Причём Asc утверждает, что это символ с кодом 95 (подчёркивание)...
Где грабли?
P.S. Мне пора в дурку.... Первый раз с таким глюкалом встретился....
Кстати, такого бзика нет, если извлечть данные из файла локально, а не сервера....
Здравствуйте, Zheka, Вы писали:
Z>Система выдаёт: Invalid procedure call or argument на Write объекта FileSystemObject.
С разными файлами с разным размером стопорится при записи символа '63' ? Не должно. А на каком i останавливается ? Место на диске есть ? Или в ToSave.Write каким-то чудом передаётся "".
Z>Кстати, такого бзика нет, если извлечть данные из файла локально, а не сервера....
А есть возможность забить на FSO и записать обычным Open...for Binary->Put->Close ? Проще по-моему...
Здравствуйте, ma3ai, Вы писали:
M>С разными файлами с разным размером стопорится при записи символа '63' ? Не должно. А на каком i останавливается ? Место на диске есть ? Или в ToSave.Write каким-то чудом передаётся "".
Это функция выдяёт, что это символ с кодом 63, хотя, это явно не верно.
Больше всего удивляет, что срабатывает эта строка
If w <> Chr(Asc(w)) Then MsgBox"НЕ РАВНО!!!"
Z>Кстати, такого бзика нет, если извлечть данные из файла локально, а не сервера.... M>А есть возможность забить на FSO и записать обычным Open...for Binary->Put->Close ? Проще по-моему...
Как бинарный, а не как текстовый? Хм... Попробую...
Здравствуйте, Zheka, Вы писали:
Z>Здравствуйте, ma3ai, Вы писали:
M>С разными файлами с разным размером стопорится при записи символа '63' ? Не должно. А на каком i останавливается ? Место на диске есть ? Или в ToSave.Write каким-то чудом передаётся "". Z>Это функция выдяёт, что это символ с кодом 63, хотя, это явно не верно. Z>Больше всего удивляет, что срабатывает эта строка Z>
Z> If w <> Chr(Asc(w)) Then MsgBox"НЕ РАВНО!!!"
Z>
Z>Кстати, такого бзика нет, если извлечть данные из файла локально, а не сервера.... M>А есть возможность забить на FSO и записать обычным Open...for Binary->Put->Close ? Проще по-моему... Z>Как бинарный, а не как текстовый? Хм... Попробую...
С Put по моему таже фигня..... Юзай Print # в Output моде
Z>Больше всего удивляет, что срабатывает эта строка
Z> If w <> Chr(Asc(w)) Then MsgBox"НЕ РАВНО!!!"
Она и должна срабатывать для строки, состоящей из более чем одного символа, коим и является в данный момент переменная w = Replace(w, Chr(63), "?") или w = "?".
If w <> Chr(Asc(w)) ' илиIf"?" <> Chr(Asc("?")) ' илиIf"?" <> Chr(38) ' 38 - это Asc("&"), т.к. преобразуется первый символ, илиIf"?" <> "&"
Здравствуйте, Vi2, Вы писали:
Vi2>Здравствуйте, Zheka, Вы писали:
Vi2>Она и должна срабатывать для строки, состоящей из более чем одного символа, коим и является в данный момент переменная w = Replace(w, Chr(63), "?") или w = "?". Vi2>
Vi2>If w <> Chr(Asc(w)) ' или
Vi2>If"?" <> Chr(Asc("?")) ' или
Vi2>If"?" <> Chr(38) ' 38 - это Asc("&"), т.к. преобразуется первый символ, или
Vi2>If"?" <> "&"
Vi2>
Я же писал совершенно ясно:
w = Replace(w, Chr(63), "?") ' не заменилось!!!
Не было замены.Символ остался символом. Asc выдаёт 63, но реально это НЕ ТАК.
Z>w = Replace(w, Chr(63), "?") ' не заменилось!!!
Z>Не было замены.Символ остался символом. Asc выдаёт 63, но реально это НЕ ТАК.
Скорее всего ты напортачил с Unicode-ANSI преобразованием. Т.е. строка S как-то не так получается. Другого что-то и в голову не лезет, потому как вроде бы тождество. Поэтому неплохо бы посмотреть на то место, где создается строка S и как открывается файл.