Имя: Пароль:
1C
1С v8
Как записать в переменную только числовые значения?
0 breezee
 
25.11.15
21:41
Нашел вот этот код, но он не рабочий
Новая="";
Для к = 1 По СтрДлина(Стр) Цикл
  Если Найти("0123456789.",Сред(Стр,к,1))=1 Тогда
    Новая = Новая+Сред(Стр,к,1);
  КонецЕсли;
КонецЦикла;
В цикле нормально просматривает по очереди все значения. Там где совпадает - возвращает 1, но на выходе Новая = "". Подскажите, что не так?
1 breezee
 
25.11.15
21:48
Наверное проблема именно с функцией НАйти() написано что она старая. Сделал так:
    Новая="";
Для к = 1 По СтрДлина(Стр) Цикл
    Если СтрНайти("0123456789.",Сред(Стр,к,1))<>0 Тогда    
    Новая = Новая+Сред(Стр,к,1);
  КонецЕсли;
КонецЦикла;

Хотя будет не удобно, если 0 символ будет тоже число.
2 Artful Den
 
25.11.15
21:50
а 0 когда не числом стал?
3 Artful Den
 
25.11.15
21:52
так-то у тебя "." - не число, если что
4 ВРедная
 
25.11.15
21:55
(3) т.е. ты предлагаешь 123.25 записывать как 12325?
5 breezee
 
25.11.15
21:56
(2) (3) Я имею ввиду, если нулевой символ будет числом, а не если нуль будет числом. "." тоже нужна. У меня в задание есть строки "КО60.09-КО09", на пример. Я хочу 60.09 и 09 записать как элементы массива. Сейчас добавил разбивку по переносам, потом переносы каждую строку в массив добавлю
    Новая="";
Для к = 1 По СтрДлина(Стр) Цикл
    Если СтрНайти("0123456789.",Сред(Стр,к,1))<>0 Тогда    
    Новая = Новая+Сред(Стр,к,1);
ИначеЕсли СтрНайти(" +-",Сред(Стр,к,1))<>0 тогда
    Новая = Новая + Символы.ПС;
  КонецЕсли;
КонецЦикла;
6 mikecool
 
25.11.15
21:58
(5) 60.09 и 09 - это строки, вангую - код бухсчета
7 breezee
 
25.11.15
21:59
(6) Конечно. А КО и ДО - кредитовый и дебетовый обороты соответственно. Я это и не скрываю =)
8 breezee
 
25.11.15
22:01
Чего-то не хочет мой код добавлять перенос строки
Вбил "КО60.09+ДО09" Он вернул "60.0909"
9 mikecool
 
25.11.15
22:01
(7) тогда ответь на вопрос - нафейхоа тебе числовые значения?
10 mikecool
 
25.11.15
22:02
(8) все правильно тебе вернул твой код, что попросил, то и вернул
11 breezee
 
25.11.15
22:03
(10) Дак я же указал что если найдет пробела, "+" или "-" - нужно добавить к строке перенос строки
12 breezee
 
25.11.15
22:05
(9) Хочу сравнить коды в тексте с кодами в плане счетов и получить навзание счетов текстовое. План счетов в XML сначала хочу получить массив кодов, поптом искать по этим кодам имена в плане
13 breezee
 
25.11.15
22:07
А, все работает. Обработку заново не запустил. Прошу прощения. Наверное тему можно закрывать. Хотя если что не получится - подниму.
14 ink-nsk
 
25.11.15
22:07
А Стр у тебя чему равен?
15 ink-nsk
 
25.11.15
22:08
(14) Понял
16 breezee
 
25.11.15
22:19
Уже не по теме. Сделал все как СП написано.
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать("C:\1.mxl");
Почему у меня в ТабДок ничего не записано? не горит зеленый карандаш в отладке.
17 Defender aka LINN
 
25.11.15
22:23
"не горит зеленый карандаш в отладке"
Беда...
18 breezee
 
25.11.15
22:24
(17) Да уже нашел как обращаться. Странно, обычно к ТЗ по индескам можно обращаться. Сейчас разберусь как искать в нём.
19 Artful Den
 
25.11.15
22:25
(4) я по сабжу и теме отвечал, так что возражений не принимаю
20 breezee
 
25.11.15
22:27
(19) Да я и не против) Никогда не умел нормально сформулировать тему. Нужно это как-то развивать. Вот только как?..
21 Artful Den
 
25.11.15
22:31
(20) Мисту читай. Толкни такую тему в пятницу и сразу на путь истинный встанешь
22 Defender aka LINN
 
25.11.15
22:33
(18) К ТЗ по индексу можно обращаться всегда. Если нет - то может таки у тебя и не ТЗ?
23 Serg_1960
 
25.11.15
22:34
Может поможет Обрезать код номенклатуры - я там две функции вбросил
24 breezee
 
25.11.15
22:37
(21) Спасибо за совет. Вечерком загляну!
(22) Вот так обращаюсь
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать("C:\1.mxl");
//1 - имя
//2 - код
Для Каждого элТекст из МассивСтрок цикл
     Для СчСтрок = 1 по ТабДок.ВысотаТаблицы Цикл
         Текст = ТабДок.Область(СчСтрок,2).Текст;
         Если Текст = элТекст Тогда
         Сообщить(Текст +")____("+ ТабДок.Область(СчСтрок,1).Текст);
         КонецЕсли;
(23) Тема закрыта? Не могу там отвечать
25 breezee
 
25.11.15
22:40
(23) А, блин, прочитал как "может поможете". Спасибо, уже помогли
26 breezee
 
25.11.15
22:55
А как найти множественное вхождение?
Для к = 1 По СтрДлина(Стр) Цикл    
Если СтрНайти(Стр,"ТочтоИщу")>0 Тогда    
        Сообщить(СтрНайти(Стр,"ТочтоИщу"));
КонецЕсли;
КонецЦикла;    

Этот код просто мне вернул первое вхождение много раз. А мне нужно чтобы он сообщил номера где входит строка поиска в строку где ищу.
27 Artful Den
 
25.11.15
22:58
(26) ну тогда тебе рекурсия нужна, имхо
28 breezee
 
25.11.15
22:59
(27) Да, сейчас тоже понял, спасибо
29 Artful Den
 
25.11.15
22:59
(26) грубо говоря - цикл
нашел первое вхождение - ищи второе и т.д.
ферштейн?
30 breezee
 
25.11.15
23:00
(29) йа йа. Сейчас попробую организовать
31 Artful Den
 
25.11.15
23:01
(30) давай, удачи ))
32 breezee
 
25.11.15
23:07
Блин. Я ж вроде условие поставил. Чего у меня рекурсия бесконечная?
Вот код
к = 1;
Пока к<=СтрДлина(Стр) цикл
Если СтрНайти(Стр,"ТочтоИщу")>0 Тогда    
    к=СтрНайти(Стр,"ТочтоИщу",,к);
    Сообщить(СтрНайти(Стр,"ТочтоИщу",,к));
КонецЕсли;
КонецЦикла;
33 breezee
 
25.11.15
23:08
Ой, я не там указал
34 breezee
 
25.11.15
23:10
Нет, все равно бесконечная
к = 1;
Пока к<=СтрДлина(Стр) цикл
Если СтрНайти(Стр,"ТочтоИщу",,к)>0 Тогда    
    к=СтрНайти(Стр,"ТочтоИщу",,к);
    Сообщить(СтрНайти(Стр,"ТочтоИщу",,к));
КонецЕсли;
КонецЦикла;
35 breezee
 
25.11.15
23:12
Уже лучше. Он хотя бы ищет. Но рекурсия все равно бесконечная. Я конечно могу лепить костыли, на подобие засекания времени. Но, может, подксажите, как без них обойтись? Вот код
к = 1;
Пока к<=СтрДлина(Стр) цикл
Если СтрНайти(Стр,"ТочтоИщу",,к)>0 Тогда    
        Сообщить(СтрНайти(Стр,"ТочтоИщу",,к));
    к=СтрНайти(Стр,"ТочтоИщу",,к)+1;
КонецЕсли;
КонецЦикла;
36 breezee
 
25.11.15
23:15
Ладно, всем спасибо. Может завтра что придумаю. Уже спать пора.
37 ifso
 
26.11.15
01:05
непотушенный нано чь горящий зеленый карандаш - причина пожара, не?
38 Горогуля
 
26.11.15
05:43
бесконечная рекурсия - это такая рекурсия, а не то, что ты понаписал
Ошибка? Это не ошибка, это системная функция.