Имя: Пароль:
1C
1С v8
Как узнать количество символов в строке?
,
0 URAL
 
02.06.12
14:49
Перебираю спр. номенклатуры. Нужно перебрать наименование, где 20 символов а где 100 и т.д.
Можно ли перебрать в цикле строку по каждому символу?
Например; Имя = "Кофе Нескафе 350гр/упак./растворимый"
Для каждого символа по Имя.Количество() Цикл
КонецЦикла


Только Имя.Количество() не будет работать в данном случае
Как можно сделать?
1 Wobland
 
02.06.12
14:52
СтрДлину отменили или где?
2 Фокусник
 
02.06.12
14:52
(0) Про нужные для этого операторы можно почитать в СП в той же ветке, где и СокрЛП() :)
3 Wobland
 
02.06.12
14:52
ну и Сред(стр, н, 1) тоже, видимо
4 Wobland
 
02.06.12
14:58
я понял! можно писать строку в файл и получать потом размер файла. главное, не забыть потом его удалить
5 URAL
 
02.06.12
15:12
Всем спасибо!
Для тех у кого будет аналогичный интерес  вот решение вопроса:
       
// обрабатываемая строка => НужныйСпр.Наименование

Для  Яч=1 По СтрДлина(НужныйСпр.Наименование) Цикл
  Сообщить(Сред(НужныйСпр.Наименование,Яч,1));    
КонецЦикла;
6 Wobland
 
02.06.12
15:13
в книгу знаний!
7 Фокусник
 
02.06.12
15:17
(0) >Перебираю спр. номенклатуры. Нужно перебрать наименование
А какая цель этого перебора?
8 URAL
 
02.06.12
15:19
(7) привести в соответствие справочник
9 Фокусник
 
02.06.12
15:20
(8) Что-то уточнение не уточнило задачу :)
10 URAL
 
02.06.12
15:33
(9) //получаем новое имя и перезаписываем наименование справочника        
НовоеИмя="";
       Для  Яч=1 По СтрДлина(НужныйСпр.Наименование) Цикл
           Если НЕ (Сред(НужныйСпр.Наименование,Яч,1)) = " " и Яч=1 Тогда
                НовоеИмя=НовоеИмя+(Сред(НужныйСпр.Наименование,Яч,1));
КонецЕсли;
       КонецЦикла;
       Сообщить("-------------НОВОЕ ИМЯ------------");
       НужныйСпр.Наименование =  НовоеИмя;
       НужныйСпр.Записать();
       Сообщить(НужныйСпр.Наименование);
11 URAL
 
02.06.12
15:35
+(10) в цикле убрал пробелы в наименовании спр. номенклатура
12 Wobland
 
02.06.12
15:39
(11) СтрЗаменить идёт лесом, я так понимаю
13 Wobland
 
02.06.12
15:40
нет, ну каков красавец, а?
14 Wobland
 
02.06.12
15:44
(12) СокрЛ, пардон
15 kosts
 
02.06.12
15:54
(10) Поправьте меня, если я не прав, но это:


НовоеИмя="";
Для  Яч=1 По СтрДлина(НужныйСпр.Наименование) Цикл
   Если НЕ (Сред(НужныйСпр.Наименование,Яч,1)) = " " и Яч=1 Тогда
       НовоеИмя=НовоеИмя+(Сред(НужныйСпр.Наименование,Яч,1));
   КонецЕсли;
КонецЦикла;


Эквивалентно этому:


Если Лев(НужныйСпр.Наименование, 1) <> " " и СтрДлина(НужныйСпр.Наименование) >= 1 Тогда
   НовоеИмя = Лев(НужныйСпр.Наименование, 1);
Иначе
   НовоеИмя = "";
КонецЕсли;
16 0_Serg_0
 
02.06.12
15:58
(15)походу ТС ща накуролесит в базе...)
17 Wobland
 
02.06.12
15:59
(15) да он фигню какую-то хочет, не знаю о существовании функций работы со строками. не буду поправлять, не хочу думать ;)
18 Wobland
 
02.06.12
15:59
(17) *не зная
19 MishaD
 
02.06.12
16:00
(14) Это не СокрЛ. Он только первый пробел убирает
20 0_Serg_0
 
02.06.12
16:02
(10)
запишется только последний элемент  с  непонятным  именем
21 Mikeware
 
02.06.12
16:03
пипец.
22 0_Serg_0
 
02.06.12
16:04
(20)...не..я тож  туплю))
23 Wobland
 
02.06.12
16:05
предлагаю всем перестать вникать в г-код автора
24 kosts
 
02.06.12
16:06
Один совет автору. Сделать резервную копию БД...
25 0_Serg_0
 
02.06.12
16:07
(23)
помоему..:
если 1 символ не пробел не пробел - тогда первый символ  название; иначе без изменений
26 Mikeware
 
02.06.12
16:10
(24) Неправильный совет. потому как восстановить с копии он тоже не сможет. Правильный совет - "вон из профессии!"©
27 MishaD
 
02.06.12
16:11
(25) Точно, точно. Ну может ему такое извращение и надо.
28 URAL
 
02.06.12
16:24
Мне нужно убрать ковычки, / и еще ряд символов, а не просто пробелы
Поетому перебрать можно только тем способом корректно которым я указал
До сего лучшего примера никто не написал
29 GROOVY
 
02.06.12
16:25
(28) Есть СТРЗаменить()
30 URAL
 
02.06.12
16:29
(29) знаю, но мне нужно еще и наименование по заданному шаблону переписать, так что не совсем то
31 Wobland
 
02.06.12
16:29
(28) кому надо писать тривиальное? впрочем, да - в книгу знаний!
32 Wobland
 
02.06.12
16:30
(30) да скажи уже всем спасибо и перестань быть объектом насмешек
33 URAL
 
02.06.12
16:30
Тоже вопрос продолжение данной темы, но написал в другой теме т.к. немножко не по теме)))  v8: Как проверить на ковычки строку?
34 URAL
 
02.06.12
16:31
(32) смотри в (5)
35 URAL
 
02.06.12
16:32
+34 предпочитаю быть объектом насмешек, но разобраться полностью
36 Mikeware
 
02.06.12
16:44
феерический идиот....
37 Vladal
 
03.06.12
01:57
(28) Правильно, грамотно "кавычки"
38 IamAlexy
 
03.06.12
01:58
жесть...
с каждым месяцем 1Сники все тупее и тупее...
39 hhhh
 
03.06.12
02:38
(24) если делать копию базы, то он никогда не научится программировать. Когда откроет базу а там в наименованиях фигня, хотя бы мозг запустится. А если бекап будет, то он вернет на место всё, и мозг так и не заработает.
40 batman69
 
03.06.12
07:12
что-то народ совсем думать отказывается, ппц.
41 Эмбеддер
 
03.06.12
07:15
да он просто прикалывается
42 batman69
 
03.06.12
07:20
хорошо если так, хотя судя по его веткам....
43 Ткачев
 
03.06.12
07:53
(38)Все правильно, адинэска все хуже и хуже, вот под нее и подстраиваются.
44 experimentator76
 
03.06.12
14:14
(5) писец - да ты Гений 1С!!
нобелевку!
45 experimentator76
 
03.06.12
14:16
(10) запросом - не ?
46 experimentator76
 
03.06.12
14:18
(26) поддержу... дверь со стороны 1С
47 experimentator76
 
03.06.12
14:20
(38) с одной стороны хорошо, а с другой не очень если они в профессии :(
48 smaharbA
 
03.06.12
15:05
Стр="// Вставить содержимое " " обработчика.";
рег=Новый COMОбъект("VBScript.RegExp");
рег.Pattern=".";
рег.Global=ИСТИНА;
Для Каждого Х из рег.Execute(Стр) Цикл
   Сообщить(Х.Value);
КонецЦикла;
49 Torquader
 
03.06.12
16:23
Функция УбратьЛишниеПробелы(ИсходнаяСтрока)
// задаём строку символов, после которых пробелы убрать
ШаблПробелов=".,:;";
// убираем пробелы в начале и в конце, чтобы не мешали
ВремСтрока=СокрЛП(ИсходнаяСтрока);
// получаем количество символов в строке
КолСим=ДлСтроки(ВремСтрока);
// результирующая строка всегда пустая
РезСтр="";
// предполагаем, что пробел уже есть
ФлагПробел=1;
Для ТекСим=1 По КолСим Цикл
 // получаем символ из строки
 Сим=Сред(ВремСтрока,ТекСим,1);
 Если Сим=" " Тогда
  // если это пробел, то нужно проверить,
  // что у нас пробела до этого не было
  Если ФлагПробел=0 Тогда
   РезСтр=РезСтр+" ";
   ФлагПробел=1;
  КонецЕсли;
 Иначе
  // если не пробел, то выводим символ
  РезСтр=РезСтр+Сим;
  // также проверяем необходимость пробела
  Если Найти(ШаблонПробелов,Сим)>0 Тогда
   // если мы нашли символ, после которого пробел убираем
   ФлагПробел=1;
  Иначе
   ФлагПробел=0;
  КонецЕсли;
 КонецЕсли;
КонецЦикла;
Возврат РезСтр;
КонецФункции
50 aleks-id
 
03.06.12
16:33
(49) что за шербет? (с)
51 0_Serg_0
 
03.06.12
16:39
кто то реально пишет стока (49) коментов?? О_О
52 aleks-id
 
03.06.12
16:44
кто то реально пишет копрокод
53 experimentator76
 
03.06.12
17:10
наверное ему платят за строки кода
поэтому каждое слово расшифровано
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший