Exemplo n.º 1
0
// take (and remove) the first number from the string and return it
// XXX should be more clever parsing floating point numbers
// (e.g. bogus 1.2e2.1e3 is currently accepted)
double TakeNumber(wxString& data)
{
	wxString s;
	data = TrimWs(data);
	if (data.IsEmpty())
		return 0.0; // some error
	if (IsNumberChar(data[0])) {
		s += data[0];
		data = data.Mid(1);
		while (data.Length() > 0 && IsNumberDigit(data[0])) {
			s += data[0];
			if (data[0] == 'e' || data[0] == 'E') {
				data = data.Mid(1);
				if (data.Length() < 1)
					break;
				if (data[0] == '+' || data[0] == '-') {
					s += data[0];
					data = data.Mid(1);
				}
			} else {
				data = data.Mid(1);
			}
		}
	}
	double f;
	s.ToDouble(&f);
	return f;
}
Exemplo n.º 2
0
//------------------------------------------------------------------------
static char* GetSLKNumValue( char* pData, char* pOutValue, bool& pIsEnd )
//------------------------------------------------------------------------
{
	char* ptrValue = pOutValue;
	char* ptrData  = pData;
	int len = 0;
	for(;;)
	{
		if( '\n' == *ptrData++ ) 
			return ptrData;

		if('\0' == *ptrData) 
		{
			pIsEnd = true;
			return ptrData;
		}

		if( ';' == *ptrData)
		{
			return ptrData;
		}

		if( !IsNumberChar( *ptrData ) )
			return ptrData;

		if( len < MAX_SLK_NUM_STRING_LEN-1 )
			*(ptrValue++) = *(ptrData);
		else
		{
			assert( "数字长度错误!" && false );
		}
		len++;
	}

	return NULL;
}
Exemplo n.º 3
0
//------------------------------------------------------------------------
char* CFileReadSLK::FetchKnownKeyValue( char* pData, bool& pIsEnd )
//------------------------------------------------------------------------
{
	char* ptrData = pData;
	++ptrData;
	if( ';' != *ptrData)
	{
		pIsEnd = true;
		return ptrData;
	}
	for(;;) 
	{
		if('\n' == *ptrData++ )	
		{
			return ptrData;
		}

		if('\0' == *ptrData)
		{
			pIsEnd = true;
			return ptrData;
		}
	
		emSlkValueType valueType = GetValueType( *ptrData );
	
		switch( valueType ) 
		{
		case ESVT_X:
			{
				char strValue[MAX_SLK_NUM_STRING_LEN];
				memset( strValue, 0, sizeof(char)*MAX_SLK_NUM_STRING_LEN );
				ptrData = GetSLKNumValue( ptrData, strValue, pIsEnd );
				if( 0 < strlen(strValue) && strlen(strValue) < 11)
				{
					m_curCol = atoi( strValue ) -1;
					if(m_curCol > 300)
					{
						m_curCol = 0;
					}
					if( m_curCol < 0 )
					{
						m_curCol = 0;
						//ZM::Log::global().log( "<<<ERROR>>> Error SLK File." );
					}
				}
				else
				{
					ErrorLog(3,"---------slkerrr-----------");
				}
			}
			break;
		case ESVT_Y:
			{
				char strValue[MAX_SLK_NUM_STRING_LEN];
				memset( strValue, 0, sizeof(char)*MAX_SLK_NUM_STRING_LEN );
				ptrData = GetSLKNumValue( ptrData, strValue, pIsEnd );
				if( 0 < strlen(strValue) && strlen(strValue) < 11)
				{
					m_curRow = atoi( strValue ) - 1;

					if(m_curRow > 5000)
					{
						m_curRow = 0;
					}
					if( m_curRow < 0 )
					{
						m_curRow = 0;
						//ZM::Log::global().log( "<<<ERROR>>> Error SLK File." );
					}
				//OutputDebugString("\n");
				}
				else
				{
					ErrorLog(3,"1111111111---------slkerrr-----------");
				}
			}
			break;
		case ESVT_K:
			{
				if( '"' != *(ptrData+1) )
				{
					if( IsNumberChar( *(ptrData+1) ) )
					{
						char strValue[MAX_SLK_NUM_STRING_LEN];
						memset( strValue, 0, sizeof(char)*MAX_SLK_NUM_STRING_LEN );
						ptrData = GetSLKNumValue( ptrData, strValue, pIsEnd );

						m_row = max( m_curRow+1, m_row );
						m_col = max( m_curCol+1, m_col );	

						_TSLKValue* value = new _TSLKValue;
						value->col	= m_curCol;
						value->row	= m_curRow;
						value->value.intValue	= atoi( strValue );
						value->value.floatValue = atof( strValue );
						size_t len = strlen( strValue );
						if( MAX_SLK_NUM_STRING_LEN <= len )
						{
							ErrorLog(3,"222222222---------slkerrr-----------");
						}
						value->value.stringValue= new char[len+2];
						memset( value->value.stringValue, 0, (len+2)*sizeof(char) );
						strcpy( value->value.stringValue, strValue );

						_TSLKValueArray.push_back( value );

						//OutputDebugString(strValue);
						//OutputDebugString("\t");
						//ZM::Log::global().log( "[%d,%d](%f)\n", m_curRow, m_curCol, atof( strValue ) );
					}
				}
				else
				{
					char strValue[MAX_SLK_VALUE_STRING];
					memset( strValue, 0, sizeof(char)*MAX_SLK_VALUE_STRING );
					ptrData = GetSLKStringValue( ptrData, strValue, pIsEnd );

					m_row = max( m_curRow+1, m_row );
					m_col = max( m_curCol+1, m_col );	

					_TSLKValue* value = new _TSLKValue;
					value->col	= m_curCol;
					value->row	= m_curRow;
					value->value.intValue	= atoi( strValue );
					value->value.floatValue = atof( strValue );
					size_t len = strlen( strValue );
					if( MAX_SLK_VALUE_STRING <= len )
					{
						ErrorLog(3,"3333---------slkerrr-----------");
					}
					value->value.stringValue= new char[len+2];
					memset( value->value.stringValue, 0, (len+2)*sizeof(char) );
					strcpy( value->value.stringValue, strValue );

					_TSLKValueArray.push_back( value );

					//OutputDebugString(strValue);
					//OutputDebugString("\t");
					//ZM::Log::global().log( "[%d,%d](%s)\n", m_curRow, m_curCol, strValue );
				}
			}
			break;
		case ESVT_A:
			while('\n'!= *ptrData && '\0'!= *ptrData)ptrData++;
			break;
		case ESVT_Unkown:
			break;
		}
	}
}