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