| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Есть значение  зк1234567/1P1, 
		
		
		
		
		
		
		
	как получить с этого значения 1234567/1, то есть обрезать вначале буквы и в конце буквы и всё что после них?  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Я бы, наверное воспользовался str StrRem (str text1,str text2) (описание есть в SystemDocumentation/Functions)
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Если речь идет о Ax4 я бы написал регулярное выражение
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А так не подойдет: 
		
		
		
		
		
		
		
	s - исходная строка X++: int pos = strfind(s, 'P',1, strlen(s)); str s1 = substr(s,1,pos-1); str s2 = substr(s,pos+1, strlen(s)-pos-1);  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 X++: //returns true if needed char found in _str boolean IsStrOk(str 100 _str) { if (strfind(_str,'0123456789/',1,strlen(_str))) return(true); else return(false); } While (Cnt <= strlen(str_to_parse)) { if ( IsStrOk(SubStr(str_to_parse,Cnt,1))) { str_to_receive = str_to_receive + SubStr(str_to_parse,Cnt,1); // здесь надо ставить break; на знак Р или любой другой закачивающий разбор строки. } Cnt++; } З.Ы. переделано на скорую руку из старого проекта, прошу сильно не бить) Последний раз редактировалось Akinak; 28.06.2007 в 18:34.  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
1) вначале всегда идут буквы ? их всегда две, как в примере, или может быть любое число? 2) между начальным и конечным набором букв цифры всегда идут со слешем, или могут быть только цифры ? Могут ли вместо слеша быть и другие знаки, например тире или точка? 3) количество знаков между первым и конечным набором букв всегда одинаково, или может быть любым? 3) в конечном наборе буква всегда одна, или их может быть две и больше ? 4) в конечном наборе всегда идут буквы и потом цифры, или могут быть другие варианты (например, только буквы;буквы, цифры и снова буквы) ? Сколько цифр может быть после последней буквы ? 5) и наконец ключевой вопрос: зачем нужно такое преобразование, какая исходная постановка задачи? Может быть, исходная задача решается другим, более простым способом ? Или может быть, исходная задача такова, что и ваш способ с преобразованием номера её не решит ? Если подходить формально, решая задачу именно так, как она вами записана, то это так: X++: S2 = substr(S1,3,9)  
		Последний раз редактировалось Zuzaz; 28.06.2007 в 18:31.  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Member 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Первое, что приходит на ум в конце рабочего дня — организовать цикл по строке с начала в конец, перебирая символы по одному. Запомнить позицию первого правильного, и первого неправильного, который следует после правильного. Потом вырезать подстроку. Функции для определения того, правильный символ или нет в Аксапте есть, и достаточно удобные.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	С уважением, glibs®  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			glibs, функции-то конечно есть, но для этого нужно четка знать критерии, которые этими функциями будут проверяться. Пока этого нет. Если формат четко такой, как в примере, т.е. 2 буквы вначале и затем 9 знаков номера, то и никакой перебор с проверками не нужен.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
6) задача разовая или постоянная? (честно говоря, если постоянная, то тогда, как поется в одной бардовской песне, "просто дыбом волоса" от проектирования...) 7) можно ли решить ее вне Аксапты (например, в Excel'е) ? Цитата: 
	
  :X++: [strDO, strPOSLE] = str2con_ru('зк1234567/1P1', 'P'); X++: {
    str str0, strDO, strPOSLE;
;
    [strDO, strPOSLE] = str2con_ru( 'зк1234567/1P1', 'P' );
    [str0 , strDO   ] = str2con_ru( strDO          , 'зк');
    info(strDO + ' ---  ' + strPOSLE);
}Последний раз редактировалось Gustav; 29.06.2007 в 08:52. Причина: добавил второй фрагмент кода  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Пенсионер 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Может это поможет: 
		
		
		
		
		
		
			X++: container str2con_MY(str _string, str _separator = ",", boolean _multiSeparator = False) { container con; int pos, oldPos = 1; str strTemp1; str symbol; ; if(_multiSeparator) { do { symbol = subStr(_string, oldPos, 1); if(strfind(_separator,symbol,1,strlen(_separator)) || !symbol) { con += strTemp1; strTemp1 = ""; } else { strTemp1 = strTemp1 + symbol; } oldPos++; } while (symbol); } else { do { pos = strScan(_string, _separator, pos ? pos + strLen(_separator) : 1, strLen(_string)); con += subStr(_string, oldPos, pos ? pos - oldPos : strLen(_string) + 1 - oldPos); oldPos = pos + strLen(_separator); } while (pos); } return con; } Пример вызова например так: X++: str2con_MY("зк1234567/1P1", "зк/P", True)  
		
				__________________ 
		
		
		
		
	  Законы природы еще никто не отменял!А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от Zuzaz
			 
 
			Как часто случается, это задание недостаточно формализовано. Без уточнения ряда вопросов по формату номера предлагать варианты бесполезно: 
		
	1) вначале всегда идут буквы ? их всегда две, как в примере, или может быть любое число? 2) между начальным и конечным набором букв цифры всегда идут со слешем, или могут быть только цифры ? Могут ли вместо слеша быть и другие знаки, например тире или точка? 3) количество знаков между первым и конечным набором букв всегда одинаково, или может быть любым? 3) в конечном наборе буква всегда одна, или их может быть две и больше ? 4) в конечном наборе всегда идут буквы и потом цифры, или могут быть другие варианты (например, только буквы;буквы, цифры и снова буквы) ? Сколько цифр может быть после последней буквы ? 5) и наконец ключевой вопрос: зачем нужно такое преобразование, какая исходная постановка задачи? Может быть, исходная задача решается другим, более простым способом ? Или может быть, исходная задача такова, что и ваш способ с преобразованием номера её не решит ? Если подходить формально, решая задачу именно так, как она вами записана, то это так: X++: S2 = substr(S1,3,9) ![]() 2. Далее идут цифры (тоже непонятно сколько ) разделение слеш и ещё несколько цифр... вот в первый заход их нужно получить. 3. Потом идёт буква Р после неё цифры. Второе значение у меня должно как раз ему равнятся... то есть если первоначально было ППРРВ12345/45Р5, то должно получится два значения: первое 12345/45 и второе 5  | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			[quote=Gustav;142376]я бы к этому совершенно справедливому списку добавил еще пару оргвопросов: 
		
		
		
		
		
		
		
	6) задача разовая или постоянная? (честно говоря, если постоянная, то тогда, как поется в одной бардовской песне, "просто дыбом волоса" от проектирования...) 7) можно ли решить ее вне Аксапты (например, в Excel'е) ? quote] задача постояная и решится должна только в АХ..  | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
X++: s1 = strkeep(s1, '1234567890/');P.S. Согласен с Gustav, делить строку с помощью str2con_RU более оптимальный вариант  | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Moderator 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#19 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
а ещё маленький вопрос как впереди первого значения поставить "*" ? то есть формируется у меня номер например накладной.. X++: modifSalesPickingListId = strRem(SalesPickingListJournalTable.SalesId, 'зсчЗКП'); //обрезаем символы заказа и закупки modifSalesPickingListId = modifSalesPickingListId + '/' + pickingId; мне казалось , J - это '*', или я что-то путаю? Последний раз редактировалось fialka; 29.06.2007 в 09:39.  | 
| 
	
 | 
| 
			
			 | 
		#20 | 
| 
			
			 Moderator 
		
			
	 | 
	
	|
| 
	
 |