刚进公司实习,安排了对数据库信息的整理工作,具体内容为将EXCEL总表的所有车型的数据根据不同车型划分为多个EXCEL表格。在数据复制的过程中,刚开始使用最基本的复制粘贴功能,文件中的数据采用外部导入的方式传输到EXCEL中,其中遇到一些问题并采用一些方案解决
1.数字位数比较大(eg:16位)在复制到EXCEL时会被EXCEL转换成科学计数法
解决方法:将数据所在表格格式 通过开始工具栏 转换为 文本格式
2.在给数据计数时在同一列向下依次加一
解决方法:鼠标指向数据格右下角出现➕符号,此时按住ctrl键向下持续拖动即可
(当不按ctrl时则会向下复制相同的数字)
(如果起始数字为文本格式,则右下角向下拖动时不按ctrl会向下递增加一,且后续数字也为文本格式。按住ctrl则数字不变进行复制)
3.在一列递增的一系列数字(大量:几十万行)中的某些固定位置添加相同英文字母(eg: 1122AB33 1122AB34 1122AB35 ......)
解决方法:在EXCEL中将所有数字加上英文字母很困难,可以使用UE的列模式来添加
首先将这一系列数复制到UE中,然后使用快捷键 alt+c 进入列模式中,将光标置于需要添加的位置,按住shift后,使用鼠标将右侧进度条拉到底,在最下端同一位置点击一下,此时出现一条蓝色线条,这时添加内容和删除可以多行同时进行
4.当数据量比较小时复制粘贴速度并不慢,但是数据量大时速度很慢,此时主管提供了文件复制提取内容的小工具,速度大幅度提升
文件信息提取方式:
第一列为车型编号,车型编号相同的有很多数据(数据范围内的),最后一列为数据内容所在的文件id序号
例如车牌为奔驰,车型编号为100,数据范围为NZ201-NZ400,则数据量为200(400+1-201),且在最后一列id对应的文件中正好也有200个数据,需要将这200个数据依照201-400依次匹配
如上所示,第一列为序号,第二列为车型编号,第三列为数据范围中的数,第四列为文件中提取出来的数据
使用工具代码如下:
#include <stdio.h>
#include <stdlib.h>
/* locate: 函数功能为在一串字符串中找到指定字符的坐标
参数: @src: 需要查找的目的字符
@str: 指定字符串
@str_length: 指定字符串的长度
返回值:找到的位置,
值为-1则错误
*/
int locate(char src,char *str,int str_length)
{
int i=0;
for(i=0;i<str_length;i++)
{
if(str[i] == src)
{
return i;
}
}
if(i == str_length)
{
printf(“在字符串中找不到指定字符: “);
printf(”%c\n”,src);
return -1;
}
}
char *GetStringAddNew(char *strData,char *pFlag,char * strMask,char * strMask1,char * strMask2)
{
int i=0;
int j=0;
int k=0;
int m=0;
int position=0;
char *strResult = NULL;
char *strCmpData = NULL;
//printf(strData);
int istrLen = strlen(strData);
int istrLenMsk = strlen(strMask);
int istrLenMsk1 = strlen(strMask1);
int istrLenMsk2 = strlen(strMask2);
if(istrLen != strlen(pFlag))
{
printf("数据长度错误,请校验两个字符串长度");
}
strResult = (char *) malloc(istrLen+1);
memset(strResult,0x00,istrLen+1);
for(i=0;i<istrLen;i++)
{
strResult[i] = strData[i];
}
i = istrLen - 1;
if(istrLenMsk != 0)
{
strCmpData = (char *) malloc(istrLenMsk+1);
memset(strCmpData,0x00,istrLenMsk+1);
strcpy(strCmpData,strMask);
}
while(k==0)
{
if(pFlag[i] == '0')
{
i--;
}
if(pFlag[i] == 'P')
{
if(strData[i] == '9')
{
strResult[i] = '0';
i--;
}
else
{
strResult[i] += 1;
k=1;
}
}
if(pFlag[i] == 'A')
{
if(strData[i] == 'Z')
{
strResult[i] = 'A';
i--;
}
else
{
strResult[i] += 1;
k=1;
}
}
if(pFlag[i] == 'M')
{
if(strData[i] == strCmpData[istrLenMsk - 1])
{
strResult[i] = strCmpData[0];
i--;
}
else
{
//strResult[i] += 1;
//寻找pFlag[i]在change中的位置
position = locate(strData[i],strCmpData,istrLenMsk);
strResult[i] = strCmpData[position +1];
k=1;
}
}
if(pFlag[i] == 'N')
{
if(strData[i] == strMask1[istrLenMsk1 - 1])
{
strResult[i] = strMask1[0];
i--;
}
else
{
//strResult[i] += 1;
//寻找pFlag[i]在change中的位置
position = locate(strData[i],strMask1,istrLenMsk1);
strResult[i] = strMask1[position +1];
k=1;
}
}
if(pFlag[i] == 'O')
{
if(strData[i] == strMask2[istrLenMsk2 - 1])
{
strResult[i] = strMask2[0];
i--;
}
else
{
//strResult[i] += 1;
//寻找pFlag[i]在change中的位置
position = locate(strData[i],strMask2,istrLenMsk2);
strResult[i] = strMask2[position +1];
k=1;
}
}
/*
if(pFlag[i] == ‘P’)
{
if(strData[i] == strMask[istrLenMsk-1])
{
strResult[i] = strMask[0];
i–;
}
else
{
for(j=0;j<istrLenMsk;j++)
{
if(strResult[i] == strMask[j])
{
strResult[i] = strMask[j+1];
break;
}
}
k=1;
}
}
/
/
if(pFlag[i] == ‘M’)
{
if(strData[i] == change[change_length - 1])
{
strResult[i] = change[0];
i–;
}
else
{
//strResult[i] += 1;
//寻找pFlag[i]在change中的位置
position = locate(pFlag[i],change,change_length);
strResult[i] = change [position +1];
k=1;
}
}
*/
}
return strResult;
}
char * GetStringAdd(char *strData,char *pFlag)
{
int i=0;
int j=0;
int k=0;
char *strResult = NULL;
//printf(strData);
int istrLen = strlen(strData);
if(istrLen != strlen(pFlag))
{
printf(“数据长度错误,请校验两个字符串长度”);
}
strResult = (char *) malloc(istrLen+1);
memset(strResult,0x00,istrLen+1);
for(i=0;i<istrLen;i++)
{
strResult[i] = strData[i];
}
i = istrLen - 1;
while(k==0)
{
if(pFlag[i] == '0')
{
i--;
}
if(pFlag[i] == 'P')
{
if(strData[i] == '9')
{
strResult[i] = '0';
i--;
}
else
{
strResult[i] += 1;
k=1;
}
}
if(pFlag[i] == 'A')
{
if(strData[i] == 'Z')
{
strData[i] = 'A';
i--;
}
else
{
strData[i] += 1;
k=1;
}
}
}
return strResult;
}
char GetStrValue(charstrSrc)
{
int i=0;
int j=0;
int istrLen = 0;
int iPosition = 0;
char *strResult = NULL;
istrLen = strlen(strSrc);
strResult = (char *) malloc(istrLen+1);
memset(strResult,0x00,istrLen+1);
for(i=0;i<istrLen;i++)
{
if(strSrc[i]==':')
{
j++;
if(j==2)
{
iPosition = i;
break;
}
}
}
for(i=iPosition+1;i<istrLen;i++)
{
strResult[i-iPosition-1] = strSrc[i];
}
return strResult;
}
int main()
{
/*
char * Src=“SeriesIndex:00000007 - Axis:13223111333122131133”;
char *dest = GetStrValue(Src);
printf(dest);
int i=0;
char *strStart = “551112”;
char *strMask = “123456”;
for(i=0;i<873;i++)
{
printf(strStart);
printf("\n");
strStart = GetStringAddNew(strStart,“00PPPP”,strMask);
}
*/
//readResouceFile("K01","K99","0PP");
char * strprint ;
char * strStart = "101A501";
char * strEnd = "410E624";
char * strMask = "MPPNOPP";
int seriesID = 6730; //系列ID
int fileID = 3022; //文件ID
int n_str = 3 ; //指定存在几种自定义值(最多3种)
char * strMaskString = "1234"; //M
char * strMaskString1 = "ABCDE"; //N
char * strMaskString2 = "56"; //O
//以下代码为生成需要加载文件名称的文件名
int iStrMaskLength = 0;
char *strFileDB1 = "D:\\ycl\\文件\\BIT\\ic";
char strFileDB2[5] = {0};
char strFileDB3[5] = ".bit";
sprintf(strFileDB2,"%04d",fileID);
char strFileDBAll[1024] = {0};
strcat(strFileDBAll,strFileDB1);
strcat(strFileDBAll,strFileDB2);
strcat(strFileDBAll,strFileDB3);
printf(strFileDBAll);
//以下代码为生成需要生成文件的文件名
char *strFileSier1 = "D:\\test\\";
char strFileSier2[6] = {0};
char strFileSier3[6] = ".txt";
sprintf(strFileSier2,"%d",seriesID);
char strFileSierAll[1024] = {0};
strcat(strFileSierAll,strFileSier1);
strcat(strFileSierAll,strFileSier2);
strcat(strFileSierAll,strFileSier3);
printf(strFileSierAll);
iStrMaskLength = strlen(strMaskString);
FILE *fp = NULL;
FILE *fpDB = NULL;
char strDB[1024] = {0};
fp = fopen(strFileSierAll, "w+");
fpDB = fopen(strFileDBAll,"r");
while(1)
{
if(strcmp(strStart,strEnd)!=0)
{
printf(strStart);
printf("\n");
fputs(strFileSier2,fp);
fputs("\t",fp);
fputs(strStart,fp);
fputs("\t",fp);
fgets(strDB,255,fpDB);
if(strlen(strDB) < 5)
{
printf("数据出现错误,目标文件少于数据大小");
}
fputs(GetStrValue(strDB),fp);
memset(strDB,0x00,1024);
// if(iStrMaskLength < 2)
if(n_str == 0) //不存在自定义变化字符串
{
strStart = GetStringAdd(strStart,strMask);
}
else //存在自定义变化字符串
{
strStart = GetStringAddNew(strStart,strMask,strMaskString,strMaskString1,strMaskString2);
}
// system("pause");
}
else
{
break;
}
}
printf("\n");
fputs(strFileSier2,fp);
fputs("\t",fp);
fputs(strEnd,fp);
fputs("\t",fp);
fgets(strDB,255,fpDB);
fputs(GetStrValue(strDB),fp);
memset(strDB,0x00,1024);
fclose(fp);
printf(strEnd);
printf("/n");
fgets(strDB,255,fpDB);
if(strlen(strDB) > 5)
{
printf("数据出现错误,目标文件超出数据大小");
}
fclose(fpDB);
//strprint = GetStringAdd("K09999","0PP0PP");
//printf(strprint);
system("pause");
return 0;
}