![]() |
|
v8: Что за глюк с преобразованием строки в число?? | ☑ | ||
---|---|---|---|---|
0
dave2000
22.01.13
✎
22:52
|
Процедура Кнопка1Нажатие(Элемент)
Путь = "D:\Картинки\"; Имя = "D:\Картинки\55159203.jpg"; Shell = Новый COMОбъект("Shell.Application"); Папка = Shell.Namespace(Путь); Файл=СтрЗаменить(Имя,"\","" ""); Файл=Папка.ParseName(СтрПолучитьСтроку(Файл,СтрЧислоСтрок(Файл))); РазрешениеСтр = Строка(Папка.GetDetailsOf(Файл,31)); //Возвращает строку типа "800 x 600" (но строку ли?) //РазрешениеСтр = "800 x 600"; //Если вот так, напрямую строку присвоить, тогда всё работает ПозХ = Найти(РазрешениеСтр,"x"); ШиринаСтр = СокрЛП(Лев(РазрешениеСтр,ПозХ-1)); ВысотаСтр = СокрЛП(Сред(РазрешениеСтр,ПозХ+1)); Ширина = Число(ШиринаСтр); // <== здесь происходит ошибка преобразования Высота = Число(ВысотаСтр); КонецПроцедуры Это код получения разрешения картинки из файла. Сам параметр с разрешением получаем нормально, проблема происходит когда мы вытягиваем из строки вида "800 х 600" значений ширины и высоты и преобразования их в числовые значения, выдаётся ошибка: > Преобразование значения к типу Число не может быть выполнено > Ширина = Число(ШиринаСтр); Подозрение падает на строку, получаемую методом GetDetailsOf() - какая-то она не совсем правильная что ли. Если мы переменной РазрешениеСтр напрямую присвоим строку "800 x 600", то всё работает, ошибок не возникает. В чём может быть проблема?? Код рабочий, можете проверить у себя. Я пробовал на трёх разных серверах, ошибка повторяется. Неуж-то глюк 1С? |
|||
1
MaxS
22.01.13
✎
23:00
|
ШиринаСтр обработать какой-нибудь типовой функцией, которая убирает все нецифровые символы. Или написать такую функцию.
|
|||
2
DrShad
22.01.13
✎
23:11
|
РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",")
|
|||
3
DrShad
22.01.13
✎
23:11
|
знание типовых таки необходимо
|
|||
4
DrShad
22.01.13
✎
23:12
|
[Неуж-то глюк 1С?] отладчик что говорит?
|
|||
5
НаборДанных
22.01.13
✎
23:19
|
Телепаты, ау...
//Возвращает строку типа "800 x 600" (но строку ли?) - Отладчик отменили уже? Ширина = Число(ШиринаСтр); ШиринаСтр - Тут что, по словам отладчика? |
|||
6
НаборДанных
22.01.13
✎
23:27
|
Очень интересно,
GetDetailsOf(<Элемент>,<Парам>) Назначение: получение информации об элементе текущей папки. Возвращает строку. Параметры: <Элемент> - объект FolderItem, соответствующий элементу текущей папки. <Парам> - целое число, определяющее тип информации. Возможные значения: 0 - Имя элемента. 1 - Размер элемента (только для файлов). 2 - Тип элемента. 3 - Дата и время последней модификации. 4 - Дата и время создания. -1 - Тип элемента, дата и время последней модификации и размер элемента (только для файлов). Описание: возвращается информация, похожая на ту, что можно увидеть в окне свойств файла (папки) в проводнике. |
|||
7
НаборДанных
22.01.13
✎
23:29
|
Используй WIA.ImageFile.
|
|||
8
dave2000
23.01.13
✎
11:18
|
(4) (5) Так в том то и дело, что отладчик показывает значение типа "Строка". Но что-то с ней не так, даёт потом ошибку преобразования.
|
|||
9
dave2000
23.01.13
✎
11:19
|
(7) ну-ка поподробнее плиз
|
|||
10
dave2000
23.01.13
✎
11:22
|
Для получения параметров картинки был выбран именно такой способ, т.к. он не требует регистрации дополнительных библиотек, т.е. стандартными средствами. Может есть ещё какие стандартные способы?
|
|||
11
Privalov
23.01.13
✎
11:24
|
(8) Что в строке?
|
|||
12
dave2000
23.01.13
✎
11:26
|
(5) ШиринаСтр в отладчике имеет тип "Строка", никаких лишних символов нет, а вот преобразовывать в число почему-то не хочет.
|
|||
13
dave2000
23.01.13
✎
11:29
|
(11) в строке находится значение ?"888 x 710?"
|
|||
14
dave2000
23.01.13
✎
11:30
|
(13) "888 x 710"
|
|||
15
acsent
23.01.13
✎
11:34
|
икс не тот конечно же
|
|||
16
dave2000
23.01.13
✎
11:35
|
(13) всё, кажется найдена причина... строку копировал с отладчика, вставилась нормально, а вот на форум отправилась со знаками "?". Потыкал строку в отладчике - действительно, есть какие-то невидимые символы с нулевой шириной. Щас буду обрабатывать строку.
|
|||
17
1Сергей
23.01.13
✎
11:37
|
ПозХ ?
|
|||
18
kittystark
23.01.13
✎
11:39
|
на самом деле строка "800 х 600" обрамлена слева и справа не просто пробелами, а еще какими-то хитрыми символами с кодами более 8000 (если память не изменяет)
попробуй СтрЗаменить(твояСтрока, Символы.НПП, " "); еще замечено, что не всегда вызов GetDetailsOf(...,31) возвращает строку содержащую размеры, лучше вызывать GetDetailsOf(...,-1) у себя по шаблону регулярного выражения .*Dimensions:\s.(\d+\sx\s\d+).* использую замену $1 и получаю "нормальную нужную строку" или как вариант по шаблону .*Dimensions:\s.(\d+)\sx\s(\d+).* через $1 - вытаскивать первый размер через $2 - второй |
|||
19
НаборДанных
23.01.13
✎
12:33
|
(9)Что еще подробнее говорить, штатная библиотэка виндовс,
LoadFile(path), потом доступно height и width. обработку сделал, кинул кнопку, прописал путь к файлу, у меня "РазрешениеСтр " далеко не строка, поэтому и валится абсолютно так же как и у вас. |
|||
20
dave2000
23.01.13
✎
13:34
|
(19) Ух ты, а ведь внатуре работает! И кода меньше:
ФайлКартинки = Новый COMОбъект("WIA.ImageFile"); ФайлКартинки.LoadFile(Путь+ИмяФайла); Ширина = ФайлКартинки.Width; Высота = ФайлКартинки.Height; |
|||
21
НаборДанных
23.01.13
✎
13:35
|
(20)Рад, что помог)
|
|||
22
dave2000
23.01.13
✎
13:38
|
Всем спасибо за помощь! :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |