文档章节

自己写小工具 让工作更简单更效率

Endroid
 Endroid
发布于 2013/09/23 19:48
字数 741
阅读 66
收藏 0

DBScarPro_DSTool.exe:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void strInsert(char *str,char *des);

/************************************************************************/
/* 功能:找寻DBScarPro需要添加的数据流                                  */
/************************************************************************/
void main()
{
	// 按任意键开始
	getchar();
	
	char *ds_item, *name_id_pre, *name_id, *ds_txt;
	FILE *fp_ds_item, *fp_ds_txt, *fp_result;
	
	ds_item = (char *)malloc(2048 * sizeof(char));		// 数据流条目
	name_id_pre = (char *)malloc(12 * sizeof(char));	// 从数据流ds_item读出的,注意'\0'
	name_id = (char *)malloc(21 * sizeof(char));		// 被变换过后NameId字符串
	ds_txt = (char *)malloc(2048 * sizeof(char));		// 要匹配的数据流文本
	
	// 内存申请失败
	if(ds_item == NULL || name_id_pre == NULL || name_id == NULL || ds_txt == NULL)
		exit(1);
	
	char* keyw[] = {"档位","燃油量","里程","水温","发动机机油温度","电瓶电压","车速","转速","瞬时油耗","ACC","遥控钥匙","驾驶员车门状态"};
	char* keyw_index[] = {"0x0015","0x0016","0x0017","0x0018","0x0019","0x001a","0x001b","0x001c","0x001d","0x001e","0x001f","0x0020"};
	int keyw_len = sizeof(keyw) / sizeof(keyw[0]);
	
	fp_ds_item = fopen("DSTRAEM_DATA.xml","r");
	fp_result = fopen("Result.xml","w");
	
	int cnt = 0;
	while(fgets(ds_item,2048,fp_ds_item) != NULL)
	{
		char *nameId_pre = "NameID=";
		char *ds_item_p = ds_item;	// 活动指针
		
		if((ds_item_p = strstr(ds_item_p,nameId_pre)) != NULL) // 定位到NameID=之后
			ds_item_p += sizeof(char) * strlen(nameId_pre);
		else
			exit(1);	// 异常退出
		
		char *name_id_pre_p = name_id_pre;

		int k = 0;
		while (k < 10)	// 得到NameID=后面的十位16进制数(包括0x)
		{
			*(name_id_pre_p++) = *(ds_item_p++);
			++k;
		}
		*(name_id_pre_p++) = '\0';
		
		strInsert(name_id_pre,name_id);	// 0x00000717 to 0x00,0x00,0x07,0x17
		
		if(*name_id != '\n')
		{
			fp_ds_txt = fopen("..\\..\\..\\txt_lib\\MyCar\\DSTREAM_CN.txt","r");
			while(fgets(ds_txt,2048,fp_ds_txt) != NULL)
			{
				if(strstr(ds_txt,name_id) != NULL)	// 找到NameId对应的数据流文本
				{
					for(int i = 0; i < keyw_len; i++)
					{
						if(strstr(ds_txt, keyw[i]) != NULL)	// 被关键字匹配到
						{
							printf("NameID=%s\n",name_id_pre);
							printf("数据流文本内容:%s",ds_txt);
							printf("被匹配的数据流关键字:\"%s\"\n",keyw[i]);

							ds_item_p = ds_item;	// 活动指针
							// 定位到Index=之后
							char *index_pre = "Index=";
							if((ds_item_p = strstr(ds_item_p,index_pre)) != NULL) 
								ds_item_p += sizeof(char) * strlen(index_pre);
							else
								exit(1);

							// 保留指针的引用,作为活动指针,而不改变原指针的指向
							char *keyw_index_p = keyw_index[i];
							int j = 0;
							while (j < 6)	// 替换Index
							{
								*(ds_item_p++) = *(keyw_index_p++);
								++j;
							}

							fprintf(fp_result,"%s",ds_item);
							printf("建议添加的数据流:\n%s\n",ds_item);
							++cnt;
						}
					}
				}
				
			}
		}
	}
	
	printf("总共有 %d 数据流条被匹配\n\n",cnt);
	printf("处理完成!!  请于本目录的Result.xml文件中查看处理结果\n\n");
	
	fclose(fp_result);
	fclose(fp_ds_txt);
	fclose(fp_ds_item);
	
	
	free(ds_item);
	ds_item = NULL;
	
	free(name_id_pre);
	name_id_pre = NULL;
	
	free(name_id);
	name_id = NULL;
	
	free(ds_txt);
	ds_txt = NULL;
	
	// 暂停
	system("pause");
}

/************************************************************************/
/*  功能: 0x00000717 to 0x00,0x00,0x07,0x17                             */
/*  方法:除去前两位0x,后面的每隔两位插入一个",0x",后面的数字往后移位 */
/*        直到最后一个不加                                              */
/************************************************************************/
void strInsert(char *str,char *des)
{
	char *str_ins = ",0x";
	char *str_ins_tmp;
	str_ins_tmp = str_ins;
	char *str_tmp;
	str_tmp = str;
	
	char* des_tmp;
	des_tmp = des;
	
	*des_tmp++ = *str_tmp++;
	*des_tmp++ = *str_tmp++;	// 前两位0x
	
	int i = 0;
	
	while(*str_tmp != '\0')
	{
		*des_tmp++ = *str_tmp++;
		
		++i;
		if(i%2 == 0 && i < 8)	//每隔两位插入一个",0x",最后一个不加
		{
			while(*str_ins_tmp != '\0')	
				*des_tmp++ = *str_ins_tmp++;
			str_ins_tmp = str_ins;	// 指针复位
		}
	}
	*des_tmp++ = '\0';	// 结束符
}


DBScarPro_DSTool.BAT:

@echo off

echo ===========================================================================
echo   功能:从MyCar中找寻DBScarPro需要的数据流
echo.
echo	  准备工作:1.将priv_lib\MyCar\FunCfg.XML文件中现有系统的数据流全部提取
echo               到本目录的DSTRAEM_DATA.xml中
echo             2.将txt_lib\MyCar\DSTREAM_CN.txt命令变小写
echo               (UE列模式选择命令列,Ctrl+F5)
echo.
echo ============================================================================
echo.

echo 确保做好准备工作, 按任意键开始


DBScarPro_DSTool

echo 请查看本路径地下的Result.xml文件

@echo on

© 著作权归作者所有

上一篇: Android 网络编程
下一篇: MySpinner
Endroid
粉丝 8
博文 46
码字总数 68781
作品 0
深圳
程序员
私信 提问
人家写了十五年的代码!总结出提升 10 倍效率的三件事!非常受用

原文:https://www.toutiao.com/a6622514229930902020 几乎每个软件开发人员或程序员都见过其他人编写的代码,说明了“任何人都可以编码”。但你有没有遇到过所谓的神话般的“10倍效率的开发...

炎林2018
2018/11/13
0
0
创造者访谈:「效率控」开发者图拉鼎

这篇采访稿最初发布于微信公众号「Product Daily」,地址是:https://mp.weixin.qq.com/s/d4QGeRiuFKU7nBDVtHOMRQ 。大家可扫描这个二维码进行关注: 这是 Product Daily 的《创造者访谈》第...

I'm TualatriX
02/26
0
0
优秀程序员必须养成的习惯,做到这些,你离大佬就不远了

程序员,在不同的领域和场合,他们有很多不同的称呼,软件工程师(Software Engineer),程序员(Programmer),编码人(Coder),开发人员(Developer)。 这群人非常熟悉如何用计算机语言来...

苦逼小白丶
01/17
0
0
嵌入式入门指导 学习嵌入式开发

怎样才能快速熟练掌握嵌入式开发呢?成熟的嵌入式开发工程师需要做哪些事情?是很多新手朋友想要了解的,那么今天我们来简单的介绍一下 嵌入式入门指导 学习嵌入式开发 某位高人曾经说过,成...

创客学院
2018/04/19
0
0
如何有效的进行 Code Review ?

上次在「为什么每个团队都需要 Code Review」中讲了 code review 在开发中的重要性。这次说一说怎么才能让 code review 有效发挥它的作用。 使用方便的工具。要在团队中成功推行 code revie...

eapxuo
2018/03/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

golang-字符串-地址分析

demo package mainimport "fmt"func main() {str := "map.baidu.com"fmt.Println(&str, str)str = str[0:5]fmt.Println(&str, str)str = "abc"fmt.Println(&s......

李琼涛
今天
4
0
Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
今天
6
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
今天
8
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
今天
5
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部