[РЕШЕНО] Распознать число в строке

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Samouchka, 15 окт 2015.

  1. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Всем привет! Такой вопрос: как распознать число, если передана строка? Для тех кому интересно, зачем мне это нужно, отвечаю. Например, при считывании текстовых узлов xml-файлов, такие значения автоматически текстовые, даже если их содержимое - число, дата и прочее. Как узнать по содержимому текста, что это число? В моем коде я убираю кавычки от значения. Но дело в том, что их нет:
    Сообщить(ПередалиСтроку) сообщает 123 без кавычек, хотя я их ставлю.
    Наличие кавычек по бокам видимо говорит, что 123 - это строка. Если изначально написать ПередалиСтроку=123, то я и прихожу к числу. Помогите разобраться. Вот код, но он видимо ничего не значит:

    Код:
    Процедура РаспознатьЧисло()
        ПередалиСтроку="123";
        Сообщить(ПередалиСтроку);
        //Убираем кавычки по бокам
        //Кавычки слева и справа
        Если Лев(ПередалиСтроку,1)="""" Тогда
            Если Прав(ПередалиСтроку,1)="""" Тогда
                ПередалиСтроку1=Прав(ПередалиСтроку, СтрДлина(ПередалиСтроку)-1);
                ПередалиСтроку2=Лев(ПередалиСтроку1, СтрДлина(ПередалиСтроку1)-1);
                Сообщить(ПередалиСтроку2);
            КонецЕсли;
        КонецЕсли;
        //Кавычка только слева
        Если Лев(ПередалиСтроку,1)="""" Тогда
            Если Прав(ПередалиСтроку,1)<>"""" Тогда
                ПередалиСтроку2=Прав(ПередалиСтроку, СтрДлина(ПередалиСтроку)-1);
                Сообщить(ПередалиСтроку2);
            КонецЕсли;
        КонецЕсли;
        //Кавычка только справа
        Если Прав(ПередалиСтроку,1)="""" Тогда
            Если Лев(ПередалиСтроку,1)<>"""" Тогда
                ПередалиСтроку2=Лев(ПередалиСтроку, СтрДлина(ПередалиСтроку)-1);
                Сообщить(ПередалиСтроку2);
            КонецЕсли;
        КонецЕсли;
        //Кавычек нет вообще
        Если Лев(ПередалиСтроку,1)<>"""" Тогда
            Если Прав(ПередалиСтроку,1)<>"""" Тогда
                ПередалиСтроку2=ПередалиСтроку;
                Сообщить(ПередалиСтроку2);
            КонецЕсли;
        КонецЕсли;
           
        Если ТипЗнч(ПередалиСтроку2)=Тип("Число") Тогда
            СтрокаИлиЧисло=Перечисления.СтрокаЧисло.Число1;
        КонецЕсли;
        Если ТипЗнч(ПередалиСтроку2)<>Тип("Число") Тогда
            СтрокаИлиЧисло=Перечисления.СтрокаЧисло.Строка1;
        КонецЕсли;
       
        Сообщить(СтрокаИлиЧисло);
    КонецПроцедуры
  2. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.980
    Симпатии:
    398
    Баллы:
    104
    Код:
    Попытка
         Число("Ваша строка");
    Исключение
         Значит здесь строка
    КонецПопытки;
    Samouchka нравится это.
  3. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.638
    Симпатии:
    948
    Баллы:
    204
    даже навеное лучше так
    Попытка
    Результат=Число("Ваша строка")/1;
    Исключение
    Значит здесь строка
    КонецПопытки;

    т.е если делиться то явно что число. а при делении на единицу результат не измениться
    Samouchka нравится это.
  4. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.980
    Симпатии:
    398
    Баллы:
    104
    Андрей, не обязательно. Если преобразование не выполнится, то он сразу на исключение пойдет.
    Samouchka нравится это.
  5. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Спасибо за подсказку. Только вот не работает, если используется разделитель триад. Например:
    -12 365 425,365428 - строка
    если без разделителей -12365425,365428 - число
    Ну да и Бог с ним. Мне пойдет и так.
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    Тип передаваемого значения должен фигурировать в любом случае, его и нужно проверять.
    Просто если есть необходимость узнать число это или строка, то так же будет необходимость узнавать, дата ли это или булево, например....
  7. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.638
    Симпатии:
    948
    Баллы:
    204
    Не ну можно же и через СТРЗаменить убирать пробелы

    Результат = СтрЗаменить(Номенклатура.Наименование, "_", " ");

    а потом преобразовывать к числу
  8. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Draco #7 можно, но не всегда. Например,
    0704 123456 должно быть строкой (серия и номер паспорта). Поэтому уж лучше этим не пользоваться.
  9. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.638
    Симпатии:
    948
    Баллы:
    204
    Ну я как пример, я же не знаю по каким условиям Вы получаете строку для преобразования. может у вас как раз пробел это разделитель строки. я просто для примера

Поделиться этой страницей