|
Проблема с FSO при записи в лог | ☑ | ||
---|---|---|---|---|
0
art-adm
31.10.16
✎
10:33
|
Всем доброго дня.
Возникла проблема при попытки записи в файл логов строки со степенями (мм в квадрате, см в квадрате). Возникает исключение: (WriteLine): Произошла исключительная ситуация (0x800a0005) fso=Новый COMОбъект("Scripting.FileSystemObject"); Если Не fso.FileExists(""+ПутьКВременнойПапке+"\"+ПолноеИмяФайла) Тогда file=fso.CreateTextFile(""+ПутьКВременнойПапке+"\"+ПолноеИмяФайла, -1, 0); file.WriteLine(""+ТекущаяДата()+ " "+прм_Строка); file.Close(); Иначе file=fso.OpenTextFile(""+ПутьКВременнойПапке+"\"+ПолноеИмяФайла, 8, 0); file.WriteLine(""+ТекущаяДата()+ " "+прм_Строка); file.Close(); КонецЕсли; |
|||
1
Живой Ископаемый
31.10.16
✎
10:34
|
крут!
|
|||
2
Лефмихалыч
31.10.16
✎
10:35
|
места нет или прав
|
|||
3
Лефмихалыч
31.10.16
✎
10:36
|
или ПутьКВременнойПапке не существует
|
|||
4
art-adm
31.10.16
✎
10:43
|
Дело точно в степени. В строку для записи в лог файл передается наименование номенклатуры. В наименовании некоторых есть "мм в квадрате". Как только убираешь степень - все записывается нормально. Может кто-то работал с fso? Может быть есть возможность как-то форматнуть строку до передачи в метод?
|
|||
5
art-adm
01.11.16
✎
08:46
|
UP
|
|||
6
NorthWind
01.11.16
✎
08:54
|
полностью строку проблемную выведите путем Сообщить () и скопируйте ее сюда, может, чего-то прояснится.
|
|||
7
NorthWind
01.11.16
✎
08:57
|
длина строки не превышает никаких "магических цифр" типа 255, 1024, ... ?
|
|||
8
art-adm
01.11.16
✎
09:07
|
(6) (7) Сама строка:
Файл 307253 у товара Отверт. узел 16-35 1,5-10 мм? IP20 не будет загружен. Причина: Уже загружен |
|||
9
art-adm
01.11.16
✎
09:09
|
Вместо знака вопрос - возведение во 2 степень. Движок форума видимо не отображает степени.
|
|||
10
art-adm
01.11.16
✎
09:12
|
||||
11
art-adm
01.11.16
✎
09:14
|
Предыдущая ссылка неверная.
http://s018.radikal.ru/i512/1611/45/2fa8f04ecbe5.png |
|||
12
tndr
01.11.16
✎
09:22
|
(11) Может вот это поможет?
https://smearg.wordpress.com/2013/05/16/использование-оператора-f-в-powershell/ |
|||
13
Живой Ископаемый
01.11.16
✎
09:55
|
в чем помочь?
|
|||
14
SiAl-chel
01.11.16
✎
10:03
|
() А если попробовать объект ЗаписьТекста?
|
|||
15
Лефмихалыч
01.11.16
✎
10:11
|
Кавычки забыл.
Путь с пробелами должен быть в кавычках: """"+ПутьСПроблемаи+""""; |
|||
16
Fedor-1971
01.11.16
✎
10:18
|
(0) попробуй вставить свою строку в блокнот и сохранить - получишь ошибку "есть символы, которые невозможно сохранить в текущем формате", а ты программно его формируешь
Выход: - перебери символы в строке и всё что не входит в стандартные печатные символы замени на ? или что другое - возможно, этого ограничения лишен объект TextStream (object.OpenAsTextStream([iomode, [format]])) (15) больше похоже на ошибку формата строки - "недопустимое значение параметра" |
|||
17
Fedor-1971
01.11.16
✎
10:24
|
16+ Script56.CHM - найди такой файлик, это хелп по WSH там много чего интересного есть. Хотя сейчас мелкософт рекомендует использовать PowerShell.
(0) ещё один путь решения твоей проблемы - форматирование строки с использованием регулярных выражений. Поинтересуйся, занятная штука (нормальное описание там, же или поищи информацию про объект RegExp). |
|||
18
Fedor-1971
01.11.16
✎
10:43
|
(0) по поводу кода
fso=Новый COMОбъект("Scripting.FileSystemObject"); file=fso.OpenTextFile(""+ПутьКВременнойПапке+"\"+ПолноеИмяФайла, 8, true); - гарантированно получишь файл, если его нет, система создаст (одна засада, при неверном пути, система создаст файл неизвестно где, скорее всего в %temp%) Проверяй существование пути, а не файла. Если надо проверишь его наличие позже (отлаживать проще, иначе будешь долго думать где проблема в пути или в имени файла) if(!FSO.FolderExists(ПутьКВременнойПапке)) - нет пути к временной папке Не дублируй: file.WriteLine(""+ТекущаяДата()+ " "+прм_Строка); file.Close(); вынеси оные за Если - КонецЕсли; Файл у тебя всё равно создастся или откроется |
|||
19
NorthWind
01.11.16
✎
21:48
|
В порядке бреда... Есть подозрение, что ввиду тяжкого наследия неюникодных ОС текстовые файлы в VBS создаются только в однобайтовых национальных кодировках. Ввиду чего попадание на вход юникодных символов, которые не могут быть однозначно оттранслированы в кодовую страницу 1251 (для русской винды), вызывает данную ошибку.
Вывод - либо перед записью самостоятельно исправлять строку так чтобы в ней таких символов не было, либо использовать заведомо юникодный объект. Например, ADODB.Stream, который точно держит текстовые файлы и кодировку UTF-8. |
|||
20
NorthWind
02.11.16
✎
08:10
|
хотя, по прочтению доки оказалось что это именно бред, хотя мысль, похоже, была в верном направлении. Для CreateTextFile и OpenTextFile можно указать формат Unicode. Попробуйте сделать это, возможно, поможет. Вот ссылки.
http://scriptcoding.ru/2013/07/08/fso-createtextfile/ http://scriptcoding.ru/2013/07/29/fso-opentextfile/ |
|||
21
art-adm
03.11.16
✎
11:38
|
(18)(19)(20) Спасибо.
Проблема похоже действительно в кодировке. Попробую с Unicode. |
|||
22
Torquader
04.11.16
✎
02:19
|
(19) Не надо хаять VBS.
При открытии файла есть четвёртый параметр, позволяющий переключить Scripting.TextStream в режим Unicode. ' как записать в файл строку с неизвестными символами Function ToWin(ByRef s) Dim l Dim i ToWin="" l=Len(s) For i=1 To l Step 1 ToWin=ToWin & Chr(Asc(Mid(s,i,1))) Next End Function ' как бы, Unicode-строка u=ChrW(25045) & ChrW(14714) ' вариант первый - перекодирование Set fso=CreateObject("Scripting.FileSystemObject") Set f=fso.OpenTextFile("Test.1",8,True,False) ' Здесь будет ошибка - невозможно перекодировать 'f.WriteLine(u) ' а здесь не будет f.WriteLine(ToWin(u)) f.Close() ' вариант второй - можно вообще писать в Unicode Set f=fso.OpenTextFile("Test.2",8,True,True) f.WriteLine(u) f.Close() MsgBox "Files",0,"OK" |
|||
23
NorthWind
04.11.16
✎
08:58
|
(22) Да, позже увидел, см. (20).
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |