MTK平台ZCV表格数据导入到cust_battery_meter_table.h

一、简介

        由于电池供应商给过来的电池参数表格都是xls的,每个项目将xls的数据一一导入到cust_battery_meter_table.h需要花费大量的时间,而且一不小心就容易手动导入中出现部分数据错误。因此继续一种自动化脚本来进行数据的操作。


二、C语言读写xls表格

1、ubuntu默认不支持解析xls的函数,所以首先需要下载libxl库,链接:http://www.libxl.com/

选择:LibXL for Linux 3.6.5   (2015-11-18)

Download

Size: 10 344 757 bytes
MD5: 6534D494A69DCA8FD6B6582D27B68D93

下载解压后进入libxl-3.6.5.0/examples/c++目录下



三、代码编写

1、思路:从cust_battery_meter_table.h文件逐行读取并写入到新创建的copy_cust_battery_meter_table.h,当读取到电量时,从xls表格中查找到对应的OCV值并写入到新建文件,直到最后文件结束。


2、步骤:a、首先将ZCV表格和cust_battery_meter_table.h文件拷贝到libxl-3.6.5.0/examples/c++目录下

                b、在该目录下新建编译的文件read.cpp,并配置好Makfile文件,由于可能你的系统不支持g++,所以还需要安装g++,首先sudo apt-get update,然后sudo apt-get install g++即可


3、代码:由于时间有限,code还没有编写完毕,还处于调试阶段,希望有共同目标的人帮忙一起完善好代码,代码框架优点乱,还请多多包涵。

#include <iostream>
#include "libxl.h"
#include<sys/stat.h>
#include<fcntl.h>  
#include<stdio.h>
#include <string.h>
#include<unistd.h> 
#include<stdlib.h> 
#include <cstdlib>
using namespace libxl;
enum tem{
Tdef=0,
T0,
T1,
T2,
T3,
};

enum Rbat{
TRdef=5,
TR0,
TR1,
TR2,
TR3,
};

int Tbuf0[200][2];
int Tbuf1[200][2];
int Tbuf2[200][2];
int Tbuf3[200][2];
int flag;
static int i =2,j=0;
int findstr(int dod,int number)
{
    Book* book = xlCreateBook();
    //char buf[4];
    //ptr=buf;
    int voltage;
    if(book)
    {
        if(book->load("example.xls"))
        {
            Sheet* sheet = book->getSheet(0);
            if(sheet)
            {
		//unsigned int i= 1;
		while(1){
		sleep(0.1); //调试专用,调试时设置成1s
		double dod_pre = sheet->readNum(i,number);//read xls dod doblue dod
		dod_pre+=0.5;//四舍五入
		std::cout << "dod=" <<dod<< "  dod_pre=" <<dod_pre<<"  i=" <<i<<std::endl;
		int dod_new=(int)(dod_pre);
		std::cout << "dod_new=" <<dod_new<< std::endl;
		if(dod==0&&dod_new==1){
			dod_new=0;
			i=1;
		}
		if(dod==dod_new){
		std::cout << "dod==dod_pre" << std::endl;
		double vol;
		int rbat;
		vol = sheet->readNum(i, number-4);//read xls voltage
		rbat = sheet->readNum(i, number+1);
		voltage=(int)(vol*1000);
		switch(flag){
		case T0:Tbuf0[j][0]=voltage;
			Tbuf0[j][1]=rbat;
			std::cout << "Tbuf0[voltage]=" <<Tbuf0[j][0]<< "  Tbuf0[rbat]=" <<Tbuf0[j][1]<<std::endl;
			j++;
			break;
		case T1:Tbuf1[j][0]=voltage;
			Tbuf1[j][1]=rbat;
			std::cout << "Tbuf0[voltage]=" <<Tbuf0[j][0]<< "  Tbuf0[rbat]=" <<Tbuf0[j][1]<<std::endl;
			j++;
			break;
			break;
		case T2:Tbuf2[j][0]=voltage;
			Tbuf2[j][1]=rbat;
			std::cout << "Tbuf0[voltage]=" <<Tbuf0[j][0]<< "  Tbuf0[rbat]=" <<Tbuf0[j][1]<<std::endl;
			j++;
			break;
			break;
		case T3:Tbuf3[j][0]=voltage;
			Tbuf3[j][1]=rbat;
			std::cout << "Tbuf0[voltage]=" <<Tbuf0[j][0]<< "  Tbuf0[rbat]=" <<Tbuf0[j][1]<<std::endl;
			j++;
			break;
			break;
		default:break;
		}
		break;
		}
		else i++;
		}
		return voltage;
	    }
	}
   book->release();
   }
   
}
int main() 
{
    int from_fd, to_fd;
    FILE *fp;
    FILE *fp1;
    char *line=NULL;
    size_t length,length1;
    int voltage,col,rbat,next;
    char buffer[3]={'{',',','}'};
    char str_vol[4],str_dod[2],str_r[4];
    from_fd=open("metter.h",O_WRONLY);
    fp =fopen("cust_battery_meter_table.h","r");
    fp1 =fopen("metter.h","w");
    while(length1=getline(&line,&length,fp)){ 
    length = 0;

    /*****************判断读取的文件是否结束start*********************/
    std::cout << "*line =" <<*line<< std::endl;
    if(*line=='H'){
	sleep(0.1);
    std::cout << "*line =" <<*line<< std::endl;
     break;
    }
    /*****************判断读取的文件是否结束end**********************/

    while(*(line+length)!='\n'){
          if((*(line+length)=='0')&&(*(line+length+1)=='[')){
		flag = T0;
		std::cout << "*(line)=" <<*(line)<< std::endl;
		sleep(0.1);
		if((*line)=='R'){
			std::cout << "*(line)1=" <<*(line)<< std::endl;
			flag = TR0;
			sleep(0.1);
			next =0;
		}
		}
	  else if((*(line+length)=='1')&&(*(line+length+1)=='[')){
                flag = T1;
		if(*(line)=='R'){
			std::cout << "in T0" << std::endl;
			flag = TR1;
			next =0;
		}
		i=2;
		j=0;
		}
          else if((*(line+length)=='2')&&(*(line+length+1)=='[')){
                flag = T2;
		sleep(1);
		if(*(line)=='R')
			flag = TR2;
			next =0;
		i=2;
		j=0;
		}
          else if((*(line+length)=='3')&&(*(line+length+1)=='[')){
                flag = T3;
		if(*(line)=='R')
			flag = TR3;
			next =0;
		i=2;
		j=0;
		}
          else if((*(line+length)=='}')&&(*(line+length+1)==';')){
		flag = Tdef;
		}
              length++;
    }
    int dod_pre;
    int vol;
    int a=-1,b=-1,c=-1,d=0;
    switch(flag){
	case T0:std::cout << "in T0" << std::endl;
		std::cout << line << std::endl;
		col=0;
		while(*(line+col)!='\n'){
		if(*(line+col)=='{')
		{
			if(*(line+col+1)=='\n'){
				std::cout <<"ddddddd="<<d  << std::endl;
				break;
			}
			while(1)
			{
				
				if((*(line+col+d)<='9')&&(*(line+col+d)>='0'))
				{
					std::cout <<"in while(1)"<<*(line+col+d)  << std::endl;
					break;
				}
				d++;
			}
			if((*(line+col+d)<='9')&&(*(line+col+d)>='0'))
				a=*(line+col+d)-'0';
			else break;
			if((*(line+col+d+1)<='9')&&(*(line+col+d+1)>='0'))
				b=*(line+col+d+1)-'0';
			if((*(line+col+d+2)<='9')&&(*(line+col+d+2)>='0'))
				c=*(line+col+d+2)-'0';
				
			if(b==-1){
				dod_pre=a;
				std::cout << "a=?" << std::endl;
				std::cout << a << std::endl;
				vol=findstr(dod_pre,26);
			}
			else if(b!=-1&&c==-1){
				dod_pre=a*10+b;
				vol=findstr(dod_pre,26);
			}
			else if(c==0){
				dod_pre=100;
				vol=findstr(dod_pre,26);
			}
			std::cout << vol << std::endl;
			sprintf(str_vol, "%d", vol);
			
		}
		if(*(line+col)==',')
		{
			std::cout <<"vol to int 1" << std::endl;
			int dd=-1;
			if(*(line+col+1)=='\n'){
				std::cout <<"ddddddd="<<d  << std::endl;
				break;
			}
			while(1)
			{
				
				if((*(line+col+dd)<='9')&&(*(line+col+dd)>='0'))
				{
					std::cout <<"in while(1)"<<*(line+col+dd)  <<"dd="<<dd<<std::endl;
					sleep(0.1);
					break;
				}
				dd++;
			}
			if((*(line+col+dd)<='9')&&(*(line+col+dd)>='0')){
				std::cout <<"str_vol chenleillllllllll" << std::endl;
				*(line+col+dd)=str_vol[0];
				std::cout <<line+col+dd+1<< std::endl;
			}
			if((*(line+col+dd+1)<='9')&&(*(line+col+dd+1)>='0'))
				*(line+col+dd+1)=str_vol[1];
			if((*(line+col+dd+2)<='9')&&(*(line+col+dd+2)>='0'))
				*(line+col+dd+2)=str_vol[2];
			if((*(line+col+dd+3)<='9')&&(*(line+col+dd+3)>='0'))
				*(line+col+dd+3)=str_vol[3];
				//col++;
			std::cout <<"vol to int" << std::endl;
		}
		col++;
		}
			
                break;
	case T1:std::cout << "in T1" << std::endl;
		std::cout << "old line="<<line << std::endl;
		col=0;
		while(*(line+col)!='\n'){
		if(*(line+col)=='{')
		{
			if(*(line+col+1)=='\n'){
				std::cout <<"ddddddd="<<d  << std::endl;
				break;
			}
			while(1)
			{
				if((*(line+col+d)<='9')&&(*(line+col+d)>='0')){
				std::cout << "in while(1)"<<*(line+col+d) << std::endl;
					break;
				}
				d++;
			}
			if((*(line+col+d)<='9')&&(*(line+col+d)>='0'))
				a=*(line+col+d)-'0';
			else break;
			if((*(line+col+d+1)<='9')&&(*(line+col+d+1)>='0'))
				b=*(line+col+d+1)-'0';
			if((*(line+col+d+2)<='9')&&(*(line+col+d+2)>='0'))
				c=*(line+col+d+2)-'0';
				
			if(b==-1){
				dod_pre=a;
				std::cout << "a=?" << std::endl;
				std::cout << a << std::endl;
				vol=findstr(dod_pre,19);
			}
			else if(b!=-1&&c==-1){
				dod_pre=a*10+b;
				vol=findstr(dod_pre,19);
			}
			else if(c==0){
				dod_pre=100;
				vol=findstr(dod_pre,19);
			}
			std::cout << vol << std::endl;
			sprintf(str_vol, "%d", vol);
			
		}
		if(*(line+col)==',')
		{
			std::cout <<"vol to int 1" << std::endl;
			int dd=-1;
			if(*(line+col+1)=='\n'){
				std::cout <<"ddddddd="<<d  << std::endl;
				break;
			}
			while(1)
			{
				
				if((*(line+col+dd)<='9')&&(*(line+col+dd)>='0'))
				{
					std::cout <<"in while(1)"<<*(line+col+dd)  <<"dd="<<dd<<std::endl;
					sleep(0.1);
					break;
				}
				dd++;
			}
			if((*(line+col+dd)<='9')&&(*(line+col+dd)>='0')){
				std::cout <<"str_vol chenleillllllllll" << std::endl;
				*(line+col+dd)=str_vol[0];
				std::cout <<line+col+dd+1<< std::endl;
			}
			if((*(line+col+dd+1)<='9')&&(*(line+col+dd+1)>='0'))
				*(line+col+dd+1)=str_vol[1];
			if((*(line+col+dd+2)<='9')&&(*(line+col+dd+2)>='0'))
				*(line+col+dd+2)=str_vol[2];
			if((*(line+col+dd+3)<='9')&&(*(line+col+dd+3)>='0'))
				*(line+col+dd+3)=str_vol[3];
				//col++;
			std::cout <<"vol to int" << std::endl;
			//}
		}
		col++;
		}
                break;
	case T2:std::cout << "in T2" << std::endl;
		std::cout << line << std::endl;
		col=0;
		while(*(line+col)!='\n'){
		if(*(line+col)=='{')
		{
			if(*(line+col+1)=='\n'){
				std::cout <<"ddddddd="<<d  << std::endl;
				break;
			}
			while(1)
			{
				if((*(line+col+d)<='9')&&(*(line+col+d)>='0'))
					break;
				d++;
			}
			if((*(line+col+d)<='9')&&(*(line+col+d)>='0'))
				a=*(line+col+d)-'0';
			else break;
			if((*(line+col+d+1)<='9')&&(*(line+col+d+1)>='0'))
				b=*(line+col+d+1)-'0';
			if((*(line+col+d+2)<='9')&&(*(line+col+d+2)>='0'))
				c=*(line+col+d+2)-'0';
				
			if(b==-1){
				dod_pre=a;
				std::cout << "a=?" << std::endl;
				std::cout << a << std::endl;
				vol=findstr(dod_pre,12);
			}
			else if(b!=-1&&c==-1){
				dod_pre=a*10+b;
				vol=findstr(dod_pre,12);
			}
			else if(c==0){
				dod_pre=100;
				vol=findstr(dod_pre,12);
			}
			std::cout << vol << std::endl;
			sprintf(str_vol, "%d", vol);
			
		}
		if(*(line+col)==',')
		{
			std::cout <<"vol to int 1" << std::endl;
			int dd=-1;
			if(*(line+col+1)=='\n'){
				std::cout <<"ddddddd="<<d  << std::endl;
				break;
			}
			while(1)
			{
				
				if((*(line+col+dd)<='9')&&(*(line+col+dd)>='0'))
				{
					std::cout <<"in while(1)"<<*(line+col+dd)  <<"dd="<<dd<<std::endl;
					sleep(0.1);
					break;
				}
				dd++;
			}
			if((*(line+col+dd)<='9')&&(*(line+col+dd)>='0')){
				std::cout <<"str_vol chenleillllllllll" << std::endl;
				*(line+col+dd)=str_vol[0];
				std::cout <<line+col+dd+1<< std::endl;
			}
			if((*(line+col+dd+1)<='9')&&(*(line+col+dd+1)>='0'))
				*(line+col+dd+1)=str_vol[1];
			if((*(line+col+dd+2)<='9')&&(*(line+col+dd+2)>='0'))
				*(line+col+dd+2)=str_vol[2];
			if((*(line+col+dd+3)<='9')&&(*(line+col+dd+3)>='0'))
				*(line+col+dd+3)=str_vol[3];
				//col++;
			std::cout <<"vol to int" << std::endl;
		}
		col++;
		}
                break;
	case T3:std::cout << "in T3" << std::endl;
		std::cout << line << std::endl;
		col=0;
		while(*(line+col)!='\n'){
		if(*(line+col)=='{')
		{
			if(*(line+col+1)=='\n'){
				std::cout <<"ddddddd="<<d  << std::endl;
				break;
			}
			while(1)
			{
				if((*(line+col+d)<='9')&&(*(line+col+d)>='0'))
					break;
				d++;
			}
			if((*(line+col+d)<='9')&&(*(line+col+d)>='0'))
				a=*(line+col+d)-'0';
			else break;
			if((*(line+col+d+1)<='9')&&(*(line+col+d+1)>='0'))
				b=*(line+col+d+1)-'0';
			if((*(line+col+d+2)<='9')&&(*(line+col+d+2)>='0'))
				c=*(line+col+d+2)-'0';
				
			if(b==-1){
				dod_pre=a;
				std::cout << "a=?" << std::endl;
				std::cout << a << std::endl;
				vol=findstr(dod_pre,5);
			}
			else if(b!=-1&&c==-1){
				dod_pre=a*10+b;
				vol=findstr(dod_pre,5);
			}
			else if(c==0){
				dod_pre=100;
				vol=findstr(dod_pre,5);
			}
			std::cout << vol << std::endl;
			sprintf(str_vol, "%d", vol);
			
		}
		if(*(line+col)==',')
		{
			std::cout <<"vol to int 1" << std::endl;
			int dd=-1;
			if(*(line+col+1)=='\n'){
				std::cout <<"ddddddd="<<d  << std::endl;
				break;
			}
			while(1)
			{
				
				if((*(line+col+dd)<='9')&&(*(line+col+dd)>='0'))
				{
					std::cout <<"in while(1)"<<*(line+col+dd)  <<"dd="<<dd<<std::endl;
					sleep(0.1);
					break;
				}
				dd++;
			}
			if((*(line+col+dd)<='9')&&(*(line+col+dd)>='0')){
				std::cout <<"str_vol chenleillllllllll" << std::endl;
				*(line+col+dd)=str_vol[0];
				std::cout <<line+col+dd+1<< std::endl;
			}
			if((*(line+col+dd+1)<='9')&&(*(line+col+dd+1)>='0'))
				*(line+col+dd+1)=str_vol[1];
			if((*(line+col+dd+2)<='9')&&(*(line+col+dd+2)>='0'))
				*(line+col+dd+2)=str_vol[2];
			if((*(line+col+dd+3)<='9')&&(*(line+col+dd+3)>='0'))
				*(line+col+dd+3)=str_vol[3];
				//col++;
			std::cout <<"vol to int" << std::endl;
		}
		col++;
		}
                break;
	case TR0:std::cout << "in TR0" << std::endl;
		std::cout << line << std::endl;
		col=0;
		while(*(line+col)!='\n'){
		str_r[0]=' ';str_r[1]=' ';str_r[2]=' ';str_r[3]=' ';
		if(*(line+col)=='{')
		{
			vol=Tbuf0[next][0];
			rbat=Tbuf0[next][1];
			sprintf(str_r, "%d", rbat);
			int dd=-1;
			if(*(line+col+1)=='\n'){
				std::cout <<"break TR0 first {"<<dd  << std::endl;
				break;
			}
			while(1)
			{
				
				if((*(line+col+dd)<='9')&&(*(line+col+dd)>='0'))
				{
					std::cout <<"in while(1)"<<*(line+col+dd)  <<"dd="<<dd<<std::endl;
					sleep(0.1);
					break;
				}
				dd++;
				std::cout <<"in while(1)"<<*(line+col+dd)  <<"dd="<<dd<<std::endl;
				if(dd>10)
				break;
			}
			*(line+col+dd)=' ';
			*(line+col+dd+1)=' ';
			*(line+col+dd+2)=' ';
			*(line+col+dd+3)=' ';
			if((str_r[0]<='9')&&(str_r[0]>='0')){
				std::cout <<"str_r chenleillllllllll" << std::endl;
				*(line+col+dd)=str_r[0];
				std::cout <<line+col+dd<< std::endl;
			}
			if((str_r[1]<='9')&&(str_r[1]>='0'))
				*(line+col+dd+1)=str_r[1];
			if((str_r[2]<='9')&&(str_r[2]>='0'))
				*(line+col+dd+2)=str_r[2];
			if((str_r[3]<='9')&&(str_r[3]>='0'))
				*(line+col+dd+3)=str_r[3];
			
			next++;
			
			std::cout << vol << std::endl;
			sprintf(str_vol, "%d", vol);
			
		}
		if(*(line+col)==',')
		{
			std::cout <<"vol to int 1" << std::endl;
			int dd=-1;
			if(*(line+col+1)=='\n'){
				std::cout <<"ddddddd="<<dd  << std::endl;
				break;
			}
			while(1)
			{
				
				if((*(line+col+dd)<='9')&&(*(line+col+dd)>='0'))
				{
					std::cout <<"in while(1)"<<*(line+col+dd)  <<"dd="<<dd<<std::endl;
					sleep(0.1);
					break;
				}
				if(dd>10)
					break;
				dd++;
			}
			if((*(line+col+dd)<='9')&&(*(line+col+dd)>='0')){
				std::cout <<"str_vol chenleillllllllll" << std::endl;
				*(line+col+dd)=str_vol[0];
				std::cout <<line+col+dd+1<< std::endl;
			}
			if((*(line+col+dd+1)<='9')&&(*(line+col+dd+1)>='0'))
				*(line+col+dd+1)=str_vol[1];
			if((*(line+col+dd+2)<='9')&&(*(line+col+dd+2)>='0'))
				*(line+col+dd+2)=str_vol[2];
			if((*(line+col+dd+3)<='9')&&(*(line+col+dd+3)>='0'))
				*(line+col+dd+3)=str_vol[3];
				//col++;
			std::cout <<"vol to int" << std::endl;
			//}
		}
		col++;
		}
		break;
	case TR1:std::cout << "in TR1" << std::endl;
		std::cout << line << std::endl;
		col=0;
		//str_r[0]=' ';str_r[1]=' ';str_r[2]=' ';str_r[3]=' ';
		while(*(line+col)!='\n'){
		str_r[0]=' ';str_r[1]=' ';str_r[2]=' ';str_r[3]=' ';
		if(*(line+col)=='{')
		{
			vol=Tbuf1[next][0];
			rbat=Tbuf1[next][1];
			sprintf(str_r, "%d", rbat);
			int dd=-1;
			if(*(line+col+1)=='\n'){
				std::cout <<"break TR0 first {"<<dd  << std::endl;
				break;
			}
			while(1)
			{
				
				if((*(line+col+dd)<='9')&&(*(line+col+dd)>='0'))
				{
					std::cout <<"in while(1)"<<*(line+col+dd)  <<"dd="<<dd<<std::endl;
					sleep(0.1);
					break;
				}
				dd++;
			}
			*(line+col+dd)=' ';
			*(line+col+dd+1)=' ';
			*(line+col+dd+2)=' ';
			*(line+col+dd+3)=' ';
			if((str_r[0]<='9')&&(str_r[0]>='0')){
				std::cout <<"str_r chenleillllllllll" << std::endl;
				*(line+col+dd)=str_r[0];
				std::cout <<line+col+dd<< std::endl;
			}
			if((str_r[1]<='9')&&(str_r[1]>='0'))
				*(line+col+dd+1)=str_r[1];
			if((str_r[2]<='9')&&(str_r[2]>='0'))
				*(line+col+dd+2)=str_r[2];
			if((str_r[3]<='9')&&(str_r[3]>='0'))
				*(line+col+dd+3)=str_r[3];
			
			next++;
			
			std::cout << vol << std::endl;
			sprintf(str_vol, "%d", vol);
			
		}
		if(*(line+col)==',')
		{
			std::cout <<"vol to int 1" << std::endl;
			int dd=-1;
			if(*(line+col+1)=='\n'){
				std::cout <<"ddddddd="<<dd  << std::endl;
				break;
			}
			while(1)
			{
				
				if((*(line+col+dd)<='9')&&(*(line+col+dd)>='0'))
				{
					std::cout <<"in while(1)"<<*(line+col+dd)  <<"dd="<<dd<<std::endl;
					sleep(0.1);
					break;
				}
				dd++;
			}
			if((*(line+col+dd)<='9')&&(*(line+col+dd)>='0')){
				std::cout <<"str_vol chenleillllllllll" << std::endl;
				*(line+col+dd)=str_vol[0];
				std::cout <<line+col+dd+1<< std::endl;
			}
			if((*(line+col+dd+1)<='9')&&(*(line+col+dd+1)>='0'))
				*(line+col+dd+1)=str_vol[1];
			if((*(line+col+dd+2)<='9')&&(*(line+col+dd+2)>='0'))
				*(line+col+dd+2)=str_vol[2];
			if((*(line+col+dd+3)<='9')&&(*(line+col+dd+3)>='0'))
				*(line+col+dd+3)=str_vol[3];
				//col++;
			std::cout <<"vol to int" << std::endl;
			//}
		}
		col++;
		}
		break;
	case TR2:std::cout << "in TR2" << std::endl;
		std::cout << line << std::endl;
		col=0;
		//str_r[0]=' ';str_r[1]=' ';str_r[2]=' ';str_r[3]=' ';
		while(*(line+col)!='\n'){
		str_r[0]=' ';str_r[1]=' ';str_r[2]=' ';str_r[3]=' ';
		if(*(line+col)=='{')
		{
			vol=Tbuf2[next][0];
			rbat=Tbuf2[next][1];
			sprintf(str_r, "%d", rbat);
			int dd=-1;
			if(*(line+col+1)=='\n'){
				std::cout <<"break TR0 first {"<<dd  << std::endl;
				break;
			}
			while(1)
			{
				
				if((*(line+col+dd)<='9')&&(*(line+col+dd)>='0'))
				{
					std::cout <<"in while(1)"<<*(line+col+dd)  <<"dd="<<dd<<std::endl;
					sleep(0.1);
					break;
				}
				if(dd>10)
					break;
				dd++;
			}
			*(line+col+dd)=' ';
			*(line+col+dd+1)=' ';
			*(line+col+dd+2)=' ';
			*(line+col+dd+3)=' ';
			if((str_r[0]<='9')&&(str_r[0]>='0')){
				std::cout <<"str_r chenleillllllllll" << std::endl;
				*(line+col+dd)=str_r[0];
				std::cout <<line+col+dd<< std::endl;
			}
			if((str_r[1]<='9')&&(str_r[1]>='0'))
				*(line+col+dd+1)=str_r[1];
			if((str_r[2]<='9')&&(str_r[2]>='0'))
				*(line+col+dd+2)=str_r[2];
			if((str_r[3]<='9')&&(str_r[3]>='0'))
				*(line+col+dd+3)=str_r[3];
			
			next++;
			
			std::cout << vol << std::endl;
			sprintf(str_vol, "%d", vol);
			
		}
		if(*(line+col)==',')
		{
			std::cout <<"vol to int 1" << std::endl;
			int dd=-1;
			if(*(line+col+1)=='\n'){
				std::cout <<"ddddddd="<<d  << std::endl;
				break;
			}
			while(1)
			{
				
				if((*(line+col+dd)<='9')&&(*(line+col+dd)>='0'))
				{
					std::cout <<"in while(1)"<<*(line+col+dd)  <<"dd="<<dd<<std::endl;
					sleep(0.1);
					break;
				}
				if(dd>10)
					break;
				dd++;
			}
			if((*(line+col+dd)<='9')&&(*(line+col+dd)>='0')){
				std::cout <<"str_vol chenleillllllllll" << std::endl;
				*(line+col+dd)=str_vol[0];
				std::cout <<line+col+dd+1<< std::endl;
			}
			if((*(line+col+dd+1)<='9')&&(*(line+col+dd+1)>='0'))
				*(line+col+dd+1)=str_vol[1];
			if((*(line+col+dd+2)<='9')&&(*(line+col+dd+2)>='0'))
				*(line+col+dd+2)=str_vol[2];
			if((*(line+col+dd+3)<='9')&&(*(line+col+dd+3)>='0'))
				*(line+col+dd+3)=str_vol[3];
				//col++;
			std::cout <<"vol to int" << std::endl;
			//}
		}
		col++;
		}
		break;
	case TR3:std::cout << "in TR3" << std::endl;
		std::cout << line << std::endl;
		col=0;
		//str_r[0]=' ';str_r[1]=' ';str_r[2]=' ';str_r[3]=' ';
		while(*(line+col)!='\n'){
		str_r[0]=' ';str_r[1]=' ';str_r[2]=' ';str_r[3]=' ';
		if(*(line+col)=='{')
		{
			vol=Tbuf3[next][0];
			rbat=Tbuf3[next][1];
			sprintf(str_r, "%d", rbat);
			int dd=-1;
			if(*(line+col+1)=='\n'){
				std::cout <<"break TR0 first {"<<dd  << std::endl;
				break;
			}
			while(1)
			{
				
				if((*(line+col+dd)<='9')&&(*(line+col+dd)>='0'))
				{
					std::cout <<"in while(1)"<<*(line+col+dd)  <<"dd="<<dd<<std::endl;
					sleep(0.1);
					break;
				}
				if(dd>10)
					break;
				dd++;
			}
			*(line+col+dd)=' ';
			*(line+col+dd+1)=' ';
			*(line+col+dd+2)=' ';
			*(line+col+dd+3)=' ';
			if((str_r[0]<='9')&&(str_r[0]>='0')){
				std::cout <<"str_r chenleillllllllll" << std::endl;
				*(line+col+dd)=str_r[0];
				std::cout <<line+col+dd<< std::endl;
			}
			if((str_r[1]<='9')&&(str_r[1]>='0'))
				*(line+col+dd+1)=str_r[1];
			if((str_r[2]<='9')&&(str_r[2]>='0'))
				*(line+col+dd+2)=str_r[2];
			if((str_r[3]<='9')&&(str_r[3]>='0'))
				*(line+col+dd+3)=str_r[3];
			
			next++;
			
			std::cout << vol << std::endl;
			sprintf(str_vol, "%d", vol);
			
		}
		if(*(line+col)==',')
		{
			std::cout <<"vol to int 1" << std::endl;
			int dd=-1;
			if(*(line+col+1)=='\n'){
				std::cout <<"ddddddd="<<dd  << std::endl;
				break;
			}
			while(1)
			{
				
				if((*(line+col+dd)<='9')&&(*(line+col+dd)>='0'))
				{
					std::cout <<"in while(1)"<<*(line+col+dd)  <<"dd="<<dd<<std::endl;
					sleep(0.1);
					break;
				}
				if(dd>10)
					break;
				dd++;
			}
			if((*(line+col+dd)<='9')&&(*(line+col+dd)>='0')){
				std::cout <<"str_vol chenleillllllllll" << std::endl;
				*(line+col+dd)=str_vol[0];
				std::cout <<line+col+dd+1<< std::endl;
			}
			if((*(line+col+dd+1)<='9')&&(*(line+col+dd+1)>='0'))
				*(line+col+dd+1)=str_vol[1];
			if((*(line+col+dd+2)<='9')&&(*(line+col+dd+2)>='0'))
				*(line+col+dd+2)=str_vol[2];
			if((*(line+col+dd+3)<='9')&&(*(line+col+dd+3)>='0'))
				*(line+col+dd+3)=str_vol[3];
				//col++;
			std::cout <<"vol to int" << std::endl;
			//}
		}
		col++;
		}
		break;

	default:std::cout << "in Tdef" << std::endl;
		break;
    }
    write(from_fd,line,length+1);
    std::cout << "new line="<<line << std::endl;
    usleep(1000);
    }
end:
    if(from_fd<0)
	std::cout << "open file error" << std::endl;
    //write(from_fd, buffer, 15);
    Book* book = xlCreateBook();
    if(book)
    {
        if(book->load("example.xls"))
        {
            Sheet* sheet = book->getSheet(0);
            if(sheet)
            {
                const char* s = sheet->readStr(2, 1);
                if(s) std::cout << s << std::endl;
		unsigned int i= 1; 
		while(0){
		    //sheet->colWidth(100);//read xls voltage
		    //sheet->rowHeight(100);//read xls voltage
                    double vol = sheet->readNum(1, 1);//read xls voltage
	  	    //if(vol==0)
		      //  break;       
		    int dod = sheet->readNum(i, 5);//read xls dod            
                    std::cout << vol << std::endl;
		    voltage=(int)(vol*1000);
		    //voltage=voltage*1000;
		    std::cout << voltage << std::endl;
		    std::cout << i << std::endl;
		    sprintf(str_vol, "%d", voltage);
		    sprintf(str_dod, "%d", dod);
		    if(dod<10){
		    write(from_fd, buffer, 1);
		    write(from_fd, str_dod, 1);
		    write(from_fd, buffer+1, 1);
                    write(from_fd, str_vol, 4);
		    write(from_fd, buffer+2, 1);
		    write(from_fd, buffer+1, 1);
		    write(from_fd, "\n", 1);
		    }else{
		    write(from_fd, buffer, 1);
		    write(from_fd, str_dod, 2);
		    write(from_fd, buffer+1, 1);
                    write(from_fd, str_vol, 4);
		    write(from_fd, buffer+2, 1);
		    write(from_fd, buffer+1, 1);
                    write(from_fd, "\n", 1);
		   }
		    std::cout << str_vol << std::endl;
		    i++;
		}

                /*int year, month, day;
                book->dateUnpack(sheet->readNum(4, 1), &year, &month, &day);
                std::cout << year << "-" << month << "-" << day << std::endl;*/
            }
        }
        
        book->release();
    }
    
    return 0;
}




你可能感兴趣的:(MTK平台ZCV表格数据导入到cust_battery_meter_table.h)