📄 dml.h
字号:
case 5 : /* 浮点型 */
if(strcmp(Compare_F(f,Condition),Condition.OPTR)==0)
{
fseek(WA[0]->DbFi_P,HeadSize+(m-1)*WA[0]->RecLen,SEEK_SET);
for(j=1;j<=WA[0]->FldNum;j++)
{
if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"char")==0)
{
fread(ch1,1,WA[0]->FldInfor_P[j-1].FldLen,WA[0]->DbFi_P);
if(strlen(CmdRec.Range)==1)
printf("%-10s",ch1);
else if(strstr(CmdRec.Range,strupr(WA[0]->FldInfor_P[j-1].FldName)))
printf("%-10s",ch1);
}
else if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"float")==0)
{
fread(&f,sizeof(float),1,WA[0]->DbFi_P);
if(strlen(CmdRec.Range)==1)
printf("%-10f",f);
else if(strstr(CmdRec.Range,strupr(WA[0]->FldInfor_P[j-1].FldName)))
printf("%-10f",f);
}
else
{
fread(&k,sizeof(int),1,WA[0]->DbFi_P);
if(strlen(CmdRec.Range)==1)
printf("%-10d",k);
else if(strstr(CmdRec.Range,strupr(WA[0]->FldInfor_P[j-1].FldName)))
printf("%-10d",k);
}
}
printf("\n");
}
break ;
default : break ;
}
}
fclose( WA[0]->DbFi_P);
WA[0]->DbFi_P=NULL; /* 关关闭数据文件*/
WA[0]=NULL;
}
/* ---------------------------------------------------------------------------------- */
Do_Delete(CmdRec_Type CmdRec,char*Token)/* 删除记录值,将满足删除条件的记录值显示在屏幕上,其它记录值保存在原文件上 */
{
FILE*fp ;
Condition_Type Condition ;
int k,j,i,m,n,w,handle,len,length=0,f1,f2,HeadSize,Tem[20];
float f ;
char ch[20],ch1[20],cha[6],Range[150];
clrscr();
textbackground(BLUE);
textcolor(YELLOW);
strcpy(Tem,CmdRec.UserStr);
ChangeExt(Tem,".TXT");
if((WA[0]->DbFi_P=fopen(Tem,"r+b"))==NULL) /* 打开数据文件 */
{
printf("File open error!\n");
return ;
}
fseek(WA[0]->DbFi_P,0,SEEK_SET);
fread(WA[0],2,3,WA[0]->DbFi_P);
fread(&WA[0]->FldInfor_P[0],(WA[0]->FldNum)*sizeof(struct FldInforStruct),1,WA[0]->DbFi_P);
if((fp=fopen("TEP.TXT","w+b"))==NULL) /* 打开新文件,供中转数据用 */
{
printf("File open error!\n");
return ;
}
fwrite(WA[0],(6+(WA[0]->FldNum)*sizeof(struct FldInforStruct)),1,fp);
HeadSize=6+(WA[0]->FldNum)*sizeof(struct FldInforStruct);
CutBlank_Head_Tail(Token);
strncpy(Token,&Token[5],strlen(Token)-4);
CutBlank_Head_Tail(Token);
for(i=0;i<strlen(Token);i++)
{
if(Token[i]=='='||Token[i]=='<'||Token[i]=='>')
break ;
}
k=i ;
strncpy(Condition.WhichFld,Token,k); Condition.WhichFld[k] = '\0';
Condition.WhichFld[k] = '\0';
if(Token[k+1]=='>'||Token[k+1]=='<')
{
strcpy(Condition.OPTR,"<>");
strncpy(Condition.Value,&Token[k+2],strlen(Token)-k-1);
}
else
{
Condition.OPTR[0]=Token[k];
strncpy(Condition.Value,&Token[k+1],strlen(Token)-k);
}
for(i=0;i<WA[0]->FldNum;i++)
{
if(strcmp(WA[0]->FldInfor_P[i].FldName,Condition.WhichFld)==0)
{
strcpy(cha,WA[0]->FldInfor_P[i].FldClass);
break ;
}
}
n=++i ;
for(i=0;i<n-1;i++)
{
if(!strcmp("float",WA[0]->FldInfor_P[i].FldClass))
length+=sizeof(float);
else if(!strcmp("int",WA[0]->FldInfor_P[i].FldClass))
length+=sizeof(int);
else if(!strcmp("char",WA[0]->FldInfor_P[i].FldClass))
length+=(WA[0]->FldInfor_P[i].FldLen);
}
w=i ;
for(i=1;i<=WA[0]->FldNum;i++)
{
printf("%-10s",WA[0]->FldInfor_P[i-1].FldName);
strcat(Range,WA[0]->FldInfor_P[i-1].FldName);
strcat(Range,",");
}
printf("\n");
for(m=1;m<=WA[0]->TotalRec;m++)
{
fseek(WA[0]->DbFi_P,HeadSize+length+(m-1)*WA[0]->RecLen,SEEK_SET);
if(strcmp(cha,"char")==0)
{
fread(ch,1,WA[0]->FldInfor_P[w].FldLen,WA[0]->DbFi_P);
}
else if(strcmp(cha,"float")==0)
{
fread(&f,sizeof(float),1,WA[0]->DbFi_P);
}
else if(strcmp(cha,"int")==0)
{
fread(&k,sizeof(int),1,WA[0]->DbFi_P);
}
switch(strlen(cha)) /* 根据删除条件字段的类型,分流处理 */
{
case 3 : /* 满足删除条件显示在屏幕上 */
if(strcmp(Compare_I(k,Condition),Condition.OPTR)==0)
{
fseek(WA[0]->DbFi_P,HeadSize+(m-1)*WA[0]->RecLen,SEEK_SET);
for(j=1;j<=WA[0]->FldNum;j++)
{
if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"char")==0)
{
fread(ch1,1,WA[0]->FldInfor_P[j-1].FldLen,WA[0]->DbFi_P);
printf("%-10s",ch1);
}
else if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"float")==0)
{
fread(&f,sizeof(float),1,WA[0]->DbFi_P);
printf("%-10f",f);
}
else
{
fread(&k,sizeof(int),1,WA[0]->DbFi_P);
printf("%-10d",k);
}
}
printf("\n");
}
else /* 不满足删除条件的写入临时新文件 */
{
fseek(WA[0]->DbFi_P,HeadSize+(m-1)*WA[0]->RecLen,SEEK_SET);
for(j=1;j<=WA[0]->FldNum;j++)
{
if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"char")==0)
{
fread(ch1,1,WA[0]->FldInfor_P[j-1].FldLen,WA[0]->DbFi_P);
fwrite(ch1,1,WA[0]->FldInfor_P[j-1].FldLen,fp);
}
else if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"float")==0)
{
fread(&f,sizeof(float),1,WA[0]->DbFi_P);
fwrite(&f,sizeof(float),1,fp);
}
else
{
fread(&k,sizeof(int),1,WA[0]->DbFi_P);
fwrite(&k,sizeof(int),1,fp);
}
}
}
break ;
case 4 :
if(strcmp(Compare_C(ch,Condition),Condition.OPTR)==0)
{
fseek(WA[0]->DbFi_P,HeadSize+(m-1)*WA[0]->RecLen,SEEK_SET);
for(j=1;j<=WA[0]->FldNum;j++)
{
if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"char")==0)
{
fread(ch1,1,WA[0]->FldInfor_P[j-1].FldLen,WA[0]->DbFi_P);
printf("%-10s",ch1);
}
else if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"float")==0)
{
fread(&f,sizeof(float),1,WA[0]->DbFi_P);
printf("%-10f",f);
}
else
{
fread(&k,sizeof(int),1,WA[0]->DbFi_P);
printf("%-10d",k);
}
}
printf("\n");
}
else
{
fseek(WA[0]->DbFi_P,HeadSize+(m-1)*WA[0]->RecLen,SEEK_SET);
for(j=1;j<=WA[0]->FldNum;j++)
{
if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"char")==0)
{
fread(ch1,1,WA[0]->FldInfor_P[j-1].FldLen,WA[0]->DbFi_P);
fwrite(ch1,1,WA[0]->FldInfor_P[j-1].FldLen,fp);
}
else if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"float")==0)
{
fread(&f,sizeof(float),1,WA[0]->DbFi_P);
fwrite(&f,sizeof(float),1,fp);
}
else
{
fread(&k,sizeof(int),1,WA[0]->DbFi_P);
fwrite(&k,sizeof(int),1,fp);
}
}
}
break ;
case 5 :
if(strcmp(Compare_F(f,Condition),Condition.OPTR)==0)
{
fseek(WA[0]->DbFi_P,HeadSize+(m-1)*WA[0]->RecLen,SEEK_SET);
for(j=1;j<=WA[0]->FldNum;j++)
{
if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"char")==0)
{
fread(ch1,1,WA[0]->FldInfor_P[j-1].FldLen,WA[0]->DbFi_P);
printf("%-10s",ch1);
}
else if(strcmp(WA[0]->FldInfor_P[j-1].FldClass,"float")==0)
{
fread(&f,sizeof(float),1,WA[0]->DbFi_P);
printf("%-10f",f);
}
else
{
fread(&k,sizeof(int),1,WA[0]->DbFi_P);
printf("%-10d",k);
}
}
printf("\n");
}
else
{
fseek(WA[0]->DbFi_P,HeadSize+(m-1)*WA[0]->RecLen,SEEK_SET);
for(j=1;j<=WA[0]->FldNum;j++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -