Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

v8: Что за глюк с преобразованием строки в число??

v8: Что за глюк с преобразованием строки в число??
Я
   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С?
 
 
   MaxS
 
1 - 22.01.13 - 23:00
ШиринаСтр обработать какой-нибудь типовой функцией, которая убирает все нецифровые символы. Или написать такую функцию.
   DrShad
 
2 - 22.01.13 - 23:11
РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",")
   DrShad
 
3 - 22.01.13 - 23:11
знание типовых таки необходимо
   DrShad
 
4 - 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.
   dave2000
 
8 - 23.01.13 - 11:18
(4) (5) Так в том то и дело, что отладчик показывает значение типа "Строка". Но что-то с ней не так, даёт потом ошибку преобразования.
   dave2000
 
9 - 23.01.13 - 11:19
(7) ну-ка поподробнее плиз
   dave2000
 
10 - 23.01.13 - 11:22
Для получения параметров картинки был выбран именно такой способ, т.к. он не требует регистрации дополнительных библиотек, т.е. стандартными средствами. Может есть ещё какие стандартные способы?
 
 Рекламное место пустует
   Privalov
 
11 - 23.01.13 - 11:24
(8) Что в строке?
   dave2000
 
12 - 23.01.13 - 11:26
(5) ШиринаСтр в отладчике имеет тип "Строка", никаких лишних символов нет, а вот преобразовывать в число почему-то не хочет.
   dave2000
 
13 - 23.01.13 - 11:29
(11) в строке находится значение ?"888 x 710?"
   dave2000
 
14 - 23.01.13 - 11:30
(13) "888 x 710"
   acsent
 
15 - 23.01.13 - 11:34
икс не тот конечно же
   dave2000
 
16 - 23.01.13 - 11:35
(13) всё, кажется найдена причина... строку копировал с отладчика, вставилась нормально, а вот на форум отправилась со знаками "?". Потыкал строку в отладчике - действительно, есть какие-то невидимые символы с нулевой шириной. Щас буду обрабатывать строку.
   1Сергей
 
17 - 23.01.13 - 11:37
ПозХ ?
   kittystark
 
18 - 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.
обработку сделал, кинул кнопку, прописал путь к файлу, у меня "РазрешениеСтр " далеко не строка, поэтому и валится абсолютно так же как и у вас.
   dave2000
 
20 - 23.01.13 - 13:34
(19) Ух ты, а ведь внатуре работает! И кода меньше:

ФайлКартинки = Новый COMОбъект("WIA.ImageFile");
ФайлКартинки.LoadFile(Путь+ИмяФайла);
Ширина = ФайлКартинки.Width;
Высота = ФайлКартинки.Height;
   НаборДанных
 
21 - 23.01.13 - 13:35
(20)Рад, что помог)
   dave2000
 
22 - 23.01.13 - 13:38
Всем спасибо за помощь! :)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует