今天终于可以把文件中重复的行给删除了,哎,反映出来一个问题,自己对指针还是掌握的不好,遇见指针,不知道该如何进行,就像strcmp函数,参数是指针,我先前定义了char *pTmp,可是我竟然使用一下操作strcmp(pTmp[i],pTmp[j]),哎,还是得好好的学啊。
文件中删除重复行的函数是:
//删除文本fp1中的重复数据,将最后结果放在fp2中,并将重复数据放在文本fp3中
int DeleteData(FILE *fp1, FILE *fp2, FILE *fp3)
{
int iLineCount = 0;
char linebuf[iBuflen] = {0};
iLineCount = LineCount(fp1, iLineCount); //计算文本中一共有多少行
fseek(fp1, 0, 0);
char *pFile = (char *)malloc(iLineCount * iBuflen);
char *pTmp;
pTmp = pFile; //申请动态内存
while (fgets(linebuf, iBuflen, fp1))
{
memcpy(pTmp, linebuf, iBuflen);
pTmp = pTmp + iBuflen;
memset(linebuf, 0, iBuflen);
}
pTmp = pFile;
for(int i=0; i<iLineCount; i++)
{
if(*pTmp) //如果该行是NULL则不操作
{
for(int j=i+1; j<=iLineCount; j++)
{
if(strcmp(pTmp, pTmp + (j - i)*iBuflen) == 0) //查找重复行,并将下面的重复行清空
{
fprintf(fp3, pTmp + (j - i)*iBuflen);
memset(pTmp + (j - i)*iBuflen, 0, iBuflen);
}
}
fprintf(fp2,pTmp);
}
pTmp = pTmp + iBuflen;
}
free(pFile);//释放内存
return 1;
}