用C语言删除一个TXT文件中的超链接

用C语言删除一个TXT文件中的超链接,第1张

本代码测试数据:

超衔接格式我用的普通html的a标签格式,识别前后匹配字符串分别是"<a href="和"陆锋敏</a>"。

如果你想要识别其他字符串并删除,请修改函数int deleteHREF(char *str,int len)中的代码:

char strB[]="<a href=",strE[]="</a>"

程序功能说明:

识别每行数据中对应的超衔接字符串,并删除。可以一行对应多个超衔接文本。

不识别跨行的超衔接!!!!(一条超衔接,分两行写,这种不识别,注意!!)。

运行后,会在原文件的地址下新建一个new开头的文件存放删除后的数据。

比如源数据c:\list.txt。执行代码后就会新建c:\new_list.txt。这就是你要的数据。

#include <stdio.h>

#include <malloc.h>

#include <conio.h>

#include <string.h>

#define 早枝MAXC 500//预估行最大字符数量,必须大于实际数量,可改大,实际代码会动态分配空间,不会浪费内存

#define MAXFPATH 100//路径最大字符

#define MAXFNAME 50 //文件名最大字符

typedef struct fpInfo

{

    char path[MAXFPATH]

    char fname[MAXFNAME]

    char **content

    int nrow//行数

    int *nCol//实际每行字数(同时nCol[]+1也是行内存大小)

}FPINFO

FPINFO *init()

void printfTXT(FPINFO *fpInfo)//打印文本内容

void meError(void *p)//内存申请失败

int deleteHREF(char *str,int len)//删除一行字符串中超衔接文本,删除成功返回1,失败返回0

int delStr(int indexB,int indexE,char *str)//删除str中下标indexB到indexE的字符,返回删除后的字符串长度

void delFromTXT(FPINFO *fpInfo)//从文本中删除超衔接

int writeFile(FPINFO *fpInfo)//一次写入一行

int main()

{

    FPINFO *fpInfo=NULL

    fpInfo=init()

    if(fpInfo)

        printfTXT(fpInfo)

    delFromTXT(fpInfo)

    printfTXT(fpInfo)

    writeFile(fpInfo)

    return 0

}

void delFromTXT(FPINFO *fpInfo)//从文本中删除超衔接

{

    int i

    printf("\n开始从文本中删除所有超衔接内容\n")

    for(i=0i<fpInfo->nrowi++)

        deleteHREF(fpInfo->content[i],fpInfo->nCol[i])

    printf("删除完成\n\n")

}

int deleteHREF(char *str,int len)//删除一行字符串中超衔接文本,删除成功返回1,失败返回0

{

    int i,m,n,flag,flagB,flagE,lenB,lenE,indexB,indexE

    char strB[]="<a href=",strE[]="</a>"

    lenB=strlen(strB),lenE=strlen(strE)

    while(1)

    {

        flag=0

        flagB=0

        flagE=0

        for(i=0i<leni++)

        {

         基昌   if(flagB)//首字符串匹配成功,开始寻找尾字符串

            {

                m=i

                for(n=0n<lenEn++)// 对比超衔接尾字符串

                {

                    if(str[m]!=strE[n])

                        break

                    m++

                }

                if(n==lenE)//尾字符串也匹配成功

                    flagE=1,indexE=m-1

            }

            else

            {

                m=i

                for(n=0n<lenBn++)// 对比超衔接首字符串

                {

                    if(str[m]!=strB[n])

                        break

                    m++

                }

                if(n==lenB)//首字符串匹配成功,下次循环从对应首字符串之后开始

                    flagB=1,i=m-1,indexB=m-lenB

            }

            if(flagB && flagE)//首尾都匹配说明找到一个完整的衔接,执行删除衔接,行字符串移位,并开始再次检查该行字符串是否有其他衔接

            {

                len=delStr(indexB,indexE,str)

                flag=1

                break

            }

        }

        if(!flag)//复查没有找到新的匹配字符串,结束查找

            break

    }

    return 0

}

int delStr(int indexB,int indexE,char *str)//删除str中下标indexB到indexE的字符,返回删除后的字符串长度

{

    str[indexB]=0

    strcat(str,&str[indexE+1])

    return strlen(str)

}

void printfTXT(FPINFO *fpInfo)//打印文本内容

{

    int i

    printf("当前txt文本中的内容是:\n----------------\n")

    for(i=0i<fpInfo->nrowi++)

        printf("%s\n",fpInfo->content[i])

    printf("----------------\n")

}

FPINFO *init()

{

    int row=0,len=0,*ncSave=NULL

    FILE *fp=NULL

    char filePath[MAXFPATH+MAXFNAME]={0}

    char str[MAXC]={0},*rCtt=NULL,**cSave=NULL

    FPINFO *fpInfo=(FPINFO *)malloc(sizeof(FPINFO))

    meError(fpInfo)

    printf("请输入要读取的文件路径(不包含文件名,小于%d个字符):\n",MAXFPATH)

    scanf("%s",fpInfo->path)

    printf("请输入要读取的文件名称(小于%d个字符):\n",MAXFNAME)

    scanf("%s",fpInfo->fname)

    strcat(filePath,fpInfo->path)

    strcat(filePath,fpInfo->fname)

    fpInfo->content=NULL

    fpInfo->nCol=NULL

    fp=fopen(filePath,"rt+")

    if(!fp)

    {

        printf("文件打开失败!\n")

        return NULL

    }

    fseek(fp,0,SEEK_SET)

    while(fgets(str,MAXC,fp))

    {

        len=strlen(str)

        row++

        if(!fpInfo->content)

            fpInfo->content=(char **)malloc(sizeof(char *)*row)

        else

        {

            cSave=realloc(fpInfo->content,sizeof(char *)*row)

            if(cSave)

                fpInfo->content=cSave

        }

        fpInfo->nrow=row

        if(!fpInfo->nCol)

            fpInfo->nCol=(int *)malloc(sizeof(int)*row)

        else

        {

            ncSave=realloc(fpInfo->nCol,sizeof(int)*row)

            fpInfo->nCol=ncSave

        }

        fpInfo->nCol[row-1]=len

        rCtt=(char *)malloc(sizeof(char)*len+1)

        meError(fpInfo->content)

        meError(rCtt)

        memset(rCtt,0,len+1)

        strcpy(rCtt,str)

        fpInfo->content[row-1]=rCtt

        memset(str,0,MAXC)

    }

    fclose(fp)

    return fpInfo

}

int writeFile(FPINFO *fpInfo)

{

    char filePath[MAXFPATH+MAXFNAME+1]={0}

    int i,row=fpInfo->nrow

    FILE *fp=NULL

    strcat(filePath,fpInfo->path)

    strcat(filePath,"new_")

    strcat(filePath,fpInfo->fname)

    fp=fopen(filePath,"w+")

    if(!fp)

    {

        printf("文件创建失败!\n")

        return 0

    }

    fseek(fp,0,SEEK_SET)

    printf("\n----开始写入新的文件----\n")

    for(i=0i<rowi++)

        fprintf(fp,"%s",fpInfo->content[i])

    printf("----新数据保存完成----\n")

    fclose(fp)

    return 1

}

void meError(void *p)//内存申请失败

{

    if(p==NULL)

    {

        printf("\n异常:内存申请失败!回车结束程序!\n")

        while(getch()!='\r')

        exit(0)

    }

}

C语言编程,顾名思义,就是用C语言来进行计算机编程工作。C语言是国际上广泛流行的,很有发展前途的计算机高级语言.它适合作为系统描述语言,即可用来编写系统软件,也可用来编写应用软件.

中文名

C语言编程

原型

ALGOL 60

特点

结构化设计

语言类型

高级语言

定义

C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。主要有以下特点:

C语言在很多方面都可以用,不仅仅是在软件开发上,各类科研都是需要用到C语言的。具体应用比如我是学硬件的,单片机以及嵌入式系统都可以用C来开发。

C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了, 象PC- DOS 、WORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点:1. C是中级语言它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象汇编语言一样对位、字节和地址粗旁明进行 *** 作, 而这三者是计算机最基本的工作单元。

2. C是结构式语言结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调试。C 语言是以函启升数形式提供给用户的, 这些函数可方便的调用, 并具有多种循环、条件语句控制程序流向, 从而使程序完全结构化。

3. C语言功能齐全C 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑判断功能也比较强大, 可以实现决策目的编游戏,编3D游戏,做数据库,做联众世界,做聊天室,做PHOTOSHOP做FLASH,做3DMAX。

4. C语言适用范围大C语言还有一个突出的优点就是适合于多种 *** 作系统, 如DOS、UNIX,也适用于多种机型。

C语言对 *** 作系统和系统使用程序以及需要对硬件进行 *** 作的场合,用C语言明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。

C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。

常用的C语言IDE(集成开发环境)有Microsoft Visual C++,Borland C++,Watcom C++ ,Borland C++ ,Borland C++ Builder,Borland C++ 3.1 for DOS,Watcom C++ 11.0 for DOS,GNU DJGPP C++ ,Lccwin32C Compiler 3.1,Microsoft C,High C,Turbo C,Dev-C++,C-Free,win-tc等岩告等......


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12402885.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存