码迷,mamicode.com
首页 > 其他好文 > 详细

获取字符串中某一个字段的数据,GetValueFromStr

时间:2015-02-11 23:23:03      阅读:457      评论:0      收藏:0      [点我收藏+]

标签:

gps数据格式为:$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*

技术分享

/**********************************************************************
*版权所有 (C)2015, Wuyq。
*
*文件名称: GetValueFromStr.c
*内容摘要:用于演示从gps数据字符串中获取相应的内容
*其它说明:无
*当前版本: V1.0
*作    者: wuyq
*完成日期: 20150210
*
*  版本       修改时间     修改人           修改内容
********************************************************************
*   V1.0      20150210      wuyq             创建
**********************************************************************/
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//字段最大长度
#define MAX_RET_BUF_LEN     (1024)

//数据类型
typedef unsigned char       UINT8;
typedef unsigned short int  UINT16;
typedef unsigned int        UINT32;
typedef signed   int        INT32;
typedef unsigned char       BOOL;

#define  TRUE         (BOOL)1
#define  FALSE        (BOOL)0


/**********************************************************************
*功能描述:获取字符串中某一个字段的数据
*输入参数: iSerialNum-字段编号(为正整数)
pSourceStr-源字符串
pDstStr-目的字符串(提取的数据的存放位置)
cIsolater-源字符串中字段的分隔符
iDstStrSize-目的字符串的长度
*输出参数:无
*返回值: TRUE-成功  FALSE-失败
*其它说明:无
*修改日期        版本号            修改人         修改内容
* --------------------------------------------------------------
* 20150110        V1.0              wuyq           创建
***********************************************************************/
BOOL GetValueFromStr(UINT16 iSerialNum, UINT8 *pSourceStr, UINT8 *pDstStr, UINT8 cIsolater, UINT32 iDstStrSize)
{
	UINT8  *pStrBegin = NULL;
	UINT8  *pStrEnd = NULL;
	UINT8   szRetBuf[MAX_RET_BUF_LEN] = { 0 }; //截取出的字符串放入该数组中
	UINT8  *pUINT8 = NULL;
	UINT16 *pUINT16 = NULL;
	UINT32 *pUINT32 = NULL;
	UINT32  iFieldLen = 0;     //用于表示每个字段的实际长度

	if (pSourceStr == NULL)           //对输入指针的异常情况进行判断
	{
		return FALSE;
	}
	//字段首
	pStrBegin = pSourceStr;

	while (--iSerialNum != 0)
	{
		printf("wo zhixing le\n");
		pStrBegin = strchr(pStrBegin, cIsolater);
		if (pStrBegin == NULL)
		{
			return FALSE;
		}
		pStrBegin++;
	}

	//字段尾
	pStrEnd = strchr(pStrBegin, cIsolater);
	if (pStrEnd == NULL)
	{
		return FALSE;
	}

	iFieldLen = (UINT16)(pStrEnd - pStrBegin);
	if (iFieldLen >= MAX_RET_BUF_LEN) //进行异常保护, 防止每个字段的值过长
	{
		iFieldLen = MAX_RET_BUF_LEN - 1;
	}

	memcpy(szRetBuf, pStrBegin, iFieldLen);
	strncpy(pDstStr, szRetBuf, iDstStrSize);

	return TRUE;
}

/****************************************************************
*功能描述:  主函数                                             *
*输入参数:  无                                                 *
*输出参数:  无                                                 *
*返回值  :无                                                 *
*其他说明:  无                                                 *
*修改日期        版本号       修改人        修改内容
* -------------------------------------------------------------------------------
* 20150110        V1.0         wuyq           创建
****************************************************************/
void main()
{
	FILE  *hFile = NULL;   //文件句柄指针
	UINT8 szContentLine[1024] = { 0 };       //用于存放从文件中独到的每条记录
	UINT8 szDes[100] = { 0 };//接收分离出的数据
	//打开文件
	hFile = fopen("gpsdata.txt", "r");
	if (!hFile)                     //打开失败
	{
		printf("Open gpsdata.txt failed!\n");
		return -1;                  //异常退出
	}
	while (NULL != fgets(szContentLine, sizeof(szContentLine), hFile))//不断地读取文件
	{
		printf("szContentLine=[%s]\n", szContentLine);//打印没次读到一行的数据内容

		if (TRUE != GetValueFromStr(1, szContentLine, szDes, ',', sizeof(szDes)))
		{
			printf("获取信息1失败.\n");
			return -1;
		}
		printf("szDes=[%s]\n", szDes);
		if (TRUE != GetValueFromStr(2, szContentLine, szDes, ',', sizeof(szDes)))
		{
			printf("获取信息2失败.\n");
			return -1;
		}
		printf("szDes=[%s]\n", szDes);
		// ...
	}
	fclose(hFile);
	system("pause");
}

技术分享


获取字符串中某一个字段的数据,GetValueFromStr

标签:

原文地址:http://blog.csdn.net/waldmer/article/details/43733901

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!