www.pudn.com > dialogic_IVR.rar > Ctool.cpp


#include  
#include "Ctool.h" 
 
void ValueTrans( char * numstr ) 
{ 
	int i,j,zero,len,locat; 
	char str[21]=""; 
	char *ptr, c; 
	BOOL  bIsFu = FALSE; 
	 
	i=j=zero=len=locat=0; 
	 
	if( numstr[0] == '-' ) 
	{ 
		bIsFu = TRUE; 
		strcpy( numstr, &numstr[1] ); 
	} 
 
	len=strlen(numstr);	 
	for( i=0; i=1) 
			{				 
				zero+=(len-i); 
				if ( zero>8 ) 
					numstr[j++]='y'; 
				else 
				{ 
					if ( zero>4 && zero!=8) 
						numstr[j++]='w'; 
				} 
				 
				if( zero != 5 )  
				{ 
					numstr[j++]='0'; 
				} 
 
				zero=0; 
			} 
 
			numstr[j++]=str[i]; 
			if(len-i>1) 
			{ 
				switch ( len-i ) 
				{ 
					case 2: 
					case 6:  
					case 10: c='s';break;  //拾 
					case 7: 
					case 3:  c='b';break;  //百 
					case 8: 
					case 4:  c='q';break;  //千 
					case 5:  c='w';break;  //万 
					case 9:  c='y';break;  //亿 
				} 
				numstr[j++]=c; 
			} 
		} 
		else 
			zero++; 
	} 
	if ( zero>4 ) 
	{ 
		if ( zero>8 ) 
			numstr[j++]='y'; 
		else 
			numstr[j++]='w'; 
	} 
	if(locat>0) 
	{ 
		if (str[locat+1]!='0' || str[locat+2]!='0') 
		{ 
			numstr[j++]=str[locat++]; 
			numstr[j++]=str[locat++]; 
			numstr[j++]=str[locat]; 
		} 
	} 
	numstr[j]=0x0; 
	 
	if( bIsFu ) 
	{ 
		strcpy( str, numstr ); 
		strcpy( numstr, "-" ); 
		strcat( numstr, str ); 
	} 
	 
	if( !strlen(numstr) ) strcpy( numstr, "0" ); 
} 
 
/******************************************************************** 
*  将日期转为其语音串 
*********************************************************************/ 
void DateTrans( char * date ) 
{ 
	int  len, j = 4; 
	char tempstr[9] = ""; 
	 
	strcpy( tempstr, date ); 
	len = strlen( tempstr ); 
 
	strncpy( date, tempstr, 4 ); 
	date[j++] = 'N';			//年 
	if ( tempstr[4] != '0' ) 
	{ 
		date[j++]='s'; 
		if ( tempstr[5] != '0' ) 
			date[j++]=tempstr[5]; 
	} 
	else 
		date[j++] = tempstr[5]; 
	date[j++] = 'Y';			//月 
 
	if ( tempstr[6]!='0' ) 
	{ 
		if ( tempstr[6]>'1' ) 
			date[j++] = tempstr[6]; 
		date[j++]='s'; 
		if ( tempstr[7]!='0' ) 
			date[j++] = tempstr[7]; 
	} 
	else 
		date[j++] = tempstr[7]; 
	date[j++] = 'R';			//日 
	date[j] = 0x0; 
} 
 
/******************************************************************** 
*  将时间转为其语音串 
*********************************************************************/ 
void TimeTrans( char * time ) 
{ 
	int  len, j = 0; 
	char tempstr[7] = ""; 
	 
	strcpy( tempstr, time ); 
	len = strlen( tempstr ); 
 
	switch( tempstr[0] )  
	{ 
		case '0': break; 
		case '1': time[j++] = 's'; break; 
		case '2': time[j++] = tempstr[0]; time[j++] = 's'; break; 
		default: break;	 
	} 
	time[j++] = tempstr[1]; 
	if ( tempstr[1]=='0' && tempstr[0]!='0' ) j--; 
	time[j++] = '.'; 
	switch( tempstr[2] )  
	{ 
		case '0': break; 
		default:  time[j++] = tempstr[2]; time[j++] = 's'; break; 
	} 
	time[j++] = tempstr[3]; 
	if ( tempstr[3]=='0' && tempstr[2]!='0' ) j--; 
	time[j++] = 'F'; 
	time[j ]= 0x0; 
} 
//****************************************************************** 
 
/******************************************************************** 
*  将数值转化为百分数语音串 
*********************************************************************/ 
void PercentTrans( char * m_value ) 
{ 
	char   tempstr[21] = ""; 
	double value = atof( m_value ) * 100 ; 
	sprintf( tempstr, "%g", value ); 
	strcpy( m_value, "%" ); 
	strcat( m_value, tempstr ); 
} 
//****************************************************************** 
 
int AbstractData(char *szData, int nIndex, char *szOut, char cSeperatorChar) 
{ 
	/****************************** 
	前提:szData是由cSeperatorChar分隔开的字符串. 
	注意:szData若只有一个域,也需要在结尾加分隔符. 
	nIndex: 由1开始的索引 
	szOut: (out)输出的字符串,需要事先分配空间 
 
	返回: -1 出错 
	  0 成功找到, 但可能为空 
	  1 没找到 
	******************************/ 
	int nPosition; 
	char *szTemp, *szTemp2; 
	char *szTempSave; 
 
	szTemp = (char *)malloc(strlen(szData) + 1); 
	strcpy(szTemp, szData); 
	szTempSave = szTemp; 
	szOut[0] = 0; 
	szTemp2 = (char *)malloc(strlen(szData) + 1); 
 
	char szSeperator[2] = "\0"; 
	szSeperator[0] = cSeperatorChar; 
	char *p1; 
 
	//忽略第nIndex个成员之前的数据 
	for(int i = 0; i < nIndex - 1; i ++) 
	{ 
	  p1 = strstr(szTemp, szSeperator); 
	  if(p1 == NULL) 
	  { 
	   free(szTempSave); 
	   free(szTemp2); 
	   return(1); 
	  } 
	  else 
	  { 
	   nPosition = p1 - szTemp; 
	   szTemp += nPosition + 1; 
	  } 
	} 
 
	//寻找第nIndex个成员后面的分隔符 
	p1 = strstr(szTemp, szSeperator); 
	if(p1 == NULL) 
	{//第nIndex个成员没有以分隔符结尾 
	  strcpy(szOut, szTemp); 
	} 
	else 
	{//找到第nIndex个成员后面的分隔符 
	  memcpy(szOut, szTemp, p1 - szTemp); 
	  szOut[p1 - szTemp] = 0; 
	} 
 
	free(szTempSave); 
	free(szTemp2); 
 
	return(0); 
}