當前位置: 首頁>>代碼示例>>C++>>正文


C++ XString::Substring方法代碼示例

本文整理匯總了C++中XString::Substring方法的典型用法代碼示例。如果您正苦於以下問題:C++ XString::Substring方法的具體用法?C++ XString::Substring怎麽用?C++ XString::Substring使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在XString的用法示例。


在下文中一共展示了XString::Substring方法的2個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C++代碼示例。

示例1: InvokeCommand

/*
 *******************************************************************
 * Function: int DecodeAndSendCommand (XString commandString, char separator, const CKBehaviorContext& behaviorContext)
 *
 * Description :    Decodes the string message passed in into the separate parameters for the command and 
 *                  sets the output parameter valuess of the corresponding GBLWaitForCommand BB.
 *		
 * Paramters :
 *
 *    commandString     r   command string
 *    separator         r   parameter separator
 *    behaviorContext   r   behavior context    
 *
 * Returns : 
 *              0 on success, otherwise error
 *
 *******************************************************************
 */
int CGBLCommandController::InvokeCommand (XString commandString, const CKBehaviorContext& behaviorContext)
{
	int returnValue = 0; // 0 indicates success
	int separatorPos = 0; //position for string separator
	char separator = CGBLCommandController::commandSeparator;

	if (strlen (commandString.Str()) <=0)
	{
		returnValue = -1;
	}
    else
    {
	    separatorPos = commandString.Find(separator, separatorPos);
    	
	    int commandID = atoi ( (commandString.Substring (0, separatorPos)).Str() );

	    CKBehavior* targetBB = CGBLCommandController::GetTargetCommand (commandID, behaviorContext);

	    if (targetBB == NULL )
	    {
		    returnValue = -1;
	    }
		else if (! (targetBB->IsInputActive(0)) )
		{
			returnValue = -1;
		}
		else
        {
	        int argumentCount = targetBB->GetOutputParameterCount();

			int separatorCount = 0;
			for (unsigned int k=0; k < strlen (commandString.Str()); k++)
			{
				if (commandString.Str()[k] == separator)
				{
					separatorCount++;
				}
			}

			if ( separatorCount != (argumentCount + 1 ) )
			{
				returnValue = -1;
			}
			else
			{
				int prevPos = separatorPos+1;

				for(int i = 0; i < argumentCount ; i++)
				{
					separatorPos = commandString.Find(separator, prevPos);
					if (separatorPos == prevPos)
					{
						CKParameterOut* targetParam = targetBB->GetOutputParameter(i);
						targetParam->SetStringValue ("");
					}
					else
					{
						XString insert = (commandString.Substring (prevPos, separatorPos-prevPos)).Str();
						CKParameterOut* targetParam = targetBB->GetOutputParameter(i);
						targetParam->SetStringValue (insert.Str());
					}
					prevPos = separatorPos+1;
				}
				targetBB->ActivateOutput(0);
			}
        }
    }

    return returnValue;
}
開發者ID:gbaumgart,項目名稱:GBL_Backup,代碼行數:88,代碼來源:GBLCommandController.cpp

示例2: BehaviourFunction

/*
 *******************************************************************
 * Function: int BehaviourFunction() 
 *
 * Description :
 *		
 * Paramters :
 *    CKBehaviorContext& r The virtools behaviour context
 *
 * Returns : One of the many virtools return values
 *
 *******************************************************************
 */
int CGBLLOStringBuilder::BehaviourFunction(const CKBehaviorContext& behContext)
{
	CKBehavior* beh = behContext.Behavior;
	CKBeObject* beObject = beh->GetTarget();
	CKBOOL error = FALSE;
	XString outString = NULL;

    // error check to ensure virtools is working ok
	if (!beObject)
	{
		error = TRUE;
		CKParameterOut *parameterOutError = beh->GetOutputParameter(EGBLStringBuilderParamOutputs::eParamGetError);
		TGBLError::SetTGBLError(parameterOutError,CGBLCOError::EGBLCOErrorType::GBLCO_FATAL,LOI_ERROR_NO_BEHAVIOUR_STATE,LOI_ERROR_NO_BEHAVIOUR_DESC);
		beh->SetOutputParameterValue(eParamGetError, parameterOutError);
		beh->ActivateOutput(eBehOutputError, TRUE);
	}

	int lengthOfSource = 0;
	int lengthOfInsert = 0;
	int insertPosition = 0;
	if (!error)
	{
		// Reset On input, if active
		if (beh->IsInputActive(eBehInputOn)) 
		{
			beh->ActivateInput(eBehInputOn, FALSE);
		}

		// get the BB params into variables to work with
		XString sourceString = NULL;
		sourceString = (CKSTRING)(beh->GetInputParameterReadDataPtr(eParamSetSourceString));

		XString insertString = NULL;
		insertString = (CKSTRING)(beh->GetInputParameterReadDataPtr(eParamSetInsertString));

		
		beh->GetInputParameterValue(eParamSetInsertPosition,&insertPosition);

		

		lengthOfSource = strlen(sourceString.Str());
		lengthOfInsert = strlen(insertString.Str());

		// Simple bounds checking and error recovery
		if (insertPosition<0)
		{
			insertPosition=0;
		}
		if (insertPosition>lengthOfSource)
		{
			outString = sourceString;
			outString += insertString;
		}
		else
		{
			// a little more error checking and simple recovery
			// deal with the special cases first
			if (lengthOfSource<=0)
			{
				// an empty source
				outString = insertString;
			}
			else if (insertPosition == 0)
			{
				outString = insertString;
				outString += sourceString;
			}
			else
			{
				//  build up the new string
				XString start = NULL;
				XString end = NULL;
				start = sourceString.Substring(0,insertPosition);
				end = sourceString.Substring(insertPosition,lengthOfSource);
				outString  = start ;
				outString += insertString;
				outString += end;
			}
		}
	}

	if (!error)
	{
		int newCartPos = insertPosition+lengthOfInsert;
		beh->SetOutputParameterValue(eParamGetCarretPosition,&newCartPos);
		beh->SetOutputParameterValue(eParamGetNewText, outString.CStr(), outString.Length() + 1);
		beh->ActivateOutput(eBehOutputDone, TRUE);
//.........這裏部分代碼省略.........
開發者ID:gbaumgart,項目名稱:GBL_Backup,代碼行數:101,代碼來源:GBLLOStringBuilder.cpp


注:本文中的XString::Substring方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。