Вопрос по кодам символов
От: Zheka Литва  
Дата: 09.05.03 08:48
Оценка:
Приветствую.
Впал в жуткое недоразумение вот по какому вопросу:
Сразу говорю: Вижуал бейсик:
На сервере лежит текстовый файл, который я извлекаю в переменную и пытаюсь записать на диск.
Система выдаёт: Invalid procedure call or argument на Write объекта FileSystemObject.
Хм.... Теперь пишу посимвольно. Реакция: слетает на символе "?", указывая его код 63 (программно повотчил)
Смотрю оригинал на сервере и что записалось локально: мы запоролись на символе с кодом 178. Прога его не видит, признавая за "?" Причём, попытка сравнить с самим "?" или его кодом,или даже с кодом 178 ни к чему не привела...
Всякие S = Replace(S, Chr(178), "&#178") и S = Replace(S, Chr(63), "&#63") не делают погоду вообще.


For i = 1 To Len(S)

  w = Mid(S, i, 1)
  q = Asc(w)
  If q = 63 Then
    ' Сюдым мы в условии попали
    w = Replace(w, Chr(63), "&#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. Мне пора в дурку.... Первый раз с таким глюкалом встретился....
Кстати, такого бзика нет, если извлечть данные из файла локально, а не сервера....
А данные с утра ушли на базу...
Re: Вопрос по кодам символов
От: ma3ai  
Дата: 09.05.03 09:09
Оценка:
Здравствуйте, Zheka, Вы писали:

Z>Система выдаёт: Invalid procedure call or argument на Write объекта FileSystemObject.

С разными файлами с разным размером стопорится при записи символа '63' ? Не должно. А на каком i останавливается ? Место на диске есть ? Или в ToSave.Write каким-то чудом передаётся "".

Z>Кстати, такого бзика нет, если извлечть данные из файла локально, а не сервера....

А есть возможность забить на FSO и записать обычным Open...for Binary->Put->Close ? Проще по-моему...
...
Re[2]: Вопрос по кодам символов
От: Zheka Литва  
Дата: 09.05.03 11:05
Оценка:
Здравствуйте, ma3ai, Вы писали:

M>С разными файлами с разным размером стопорится при записи символа '63' ? Не должно. А на каком i останавливается ? Место на диске есть ? Или в ToSave.Write каким-то чудом передаётся "".

Это функция выдяёт, что это символ с кодом 63, хотя, это явно не верно.
Больше всего удивляет, что срабатывает эта строка
 If w <> Chr(Asc(w)) Then MsgBox "НЕ РАВНО!!!"

Z>Кстати, такого бзика нет, если извлечть данные из файла локально, а не сервера....
M>А есть возможность забить на FSO и записать обычным Open...for Binary->Put->Close ? Проще по-моему...
Как бинарный, а не как текстовый? Хм... Попробую...
А данные с утра ушли на базу...
Re[3]: Вопрос по кодам символов
От: BugMan  
Дата: 09.05.03 16:15
Оценка:
Здравствуйте, 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 моде
Re[3]: Вопрос по кодам символов
От: Vi2 Удмуртия http://www.adem.ru
Дата: 12.05.03 06:23
Оценка:
Здравствуйте, Zheka, Вы писали:

Z>Больше всего удивляет, что срабатывает эта строка

Z> If w <> Chr(Asc(w)) Then MsgBox "НЕ РАВНО!!!"

Она и должна срабатывать для строки, состоящей из более чем одного символа, коим и является в данный момент переменная w = Replace(w, Chr(63), "&#63") или w = "&#63".
If w <> Chr(Asc(w)) ' или
If "&#63" <> Chr(Asc("&#63")) ' или
If "&#63" <> Chr(38) ' 38 - это Asc("&"), т.к. преобразуется первый символ, или
If "&#63" <> "&"
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[4]: Вопрос по кодам символов
От: Zheka Литва  
Дата: 12.05.03 09:20
Оценка:
Здравствуйте, Vi2, Вы писали:

Vi2>Здравствуйте, Zheka, Вы писали:


Vi2>Она и должна срабатывать для строки, состоящей из более чем одного символа, коим и является в данный момент переменная w = Replace(w, Chr(63), "&#63") или w = "&#63".

Vi2>
Vi2>If w <> Chr(Asc(w)) ' или
Vi2>If "&#63" <> Chr(Asc("&#63")) ' или
Vi2>If "&#63" <> Chr(38) ' 38 - это Asc("&"), т.к. преобразуется первый символ, или
Vi2>If "&#63" <> "&"
Vi2>

Я же писал совершенно ясно:
w = Replace(w, Chr(63), "&#63") ' не заменилось!!!

Не было замены.Символ остался символом. Asc выдаёт 63, но реально это НЕ ТАК.
А данные с утра ушли на базу...
Re[5]: Вопрос по кодам символов
От: Vi2 Удмуртия http://www.adem.ru
Дата: 12.05.03 10:40
Оценка:
Здравствуйте, Zheka, Вы писали:

Z>Я же писал совершенно ясно:

Z>w = Replace(w, Chr(63), "&#63") ' не заменилось!!!

Z>Не было замены.Символ остался символом. Asc выдаёт 63, но реально это НЕ ТАК.

Скорее всего ты напортачил с Unicode-ANSI преобразованием. Т.е. строка S как-то не так получается. Другого что-то и в голову не лезет, потому как вроде бы тождество. Поэтому неплохо бы посмотреть на то место, где создается строка S и как открывается файл.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.