当前位置: 首页>>代码示例>>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;未经允许,请勿转载。