c语言替换第三行数据

int readfile();
void change_specify_row(int lineNumber);
void change_specify_row2(int lineNumber);
void change_specify_row3(int lineNumber);

int main(){
    // readfile();
    // writefile("pool 114.118.7.163 iburst");
    // readfile_fread();
    // get_file_length();
    // test_split();
    // change_specify_row(3);
    // change_specify_row2(3);
    change_specify_row3(3);
    return 0;
}

//read file content to str
int readfile(){

    int ret = -1;
    char ip[255];
    FILE *fp;
    fp = fopen("myfile1.txt","r");
    if(fp == NULL){
        printf("can not open file");
        ret = -1;
        return ret;
    }

    if(fgets(ip,255,fp)!=NULL){
        printf("aaa:%s\n",ip);
    }{
        printf("Error: Unable to read the file.\n");
    }
    fclose(fp);
    ret = 0;
    return ret;
}

int writefile(char *content){

    int ret = -1;
    FILE *fp = NULL;

    fp = fopen("myfile1.txt","w");
    if(fp==NULL){
        printf("can not open write file");
        return -1;
    }
    printf("content:%s\n",content);
    printf("content length=%d\n",sizeof(content));

    // use fwrite() write info
    ret = fwrite(content,1,strlen(content),fp);
    printf("fwrite ret = %d\n",ret);

    ret = fprintf(fp,content);
    printf("fprintf2 ret = %d\n",ret);

    ret = fclose(fp);
    printf("fclose ret = %d\n",fp);
    return ret;

}

int readfile_fread(){

    int ret = -1;
    FILE *fp = NULL;
    char mycontent[255];

    fp = fopen("myfile1.txt","r");
    if(fp==NULL){
        printf("can not open file");
        return -1;
    }

    ret = fread(mycontent,1,255,fp);
    printf("fread ret = %d\n",ret);
    printf("mycontent:%s\n",mycontent);
    printf("mycontent-length=%d\n",strlen(mycontent));
    mycontent[ret] = '\0';
    fclose(fp);
    return 0;
}

int get_file_length(){
    int ret = -1;
    FILE *fp = NULL;

    fp = fopen("myfile1.txt","r");
    if(fp == NULL){
        printf("can not open file");
        return -1;
    }
    ret = fseek(fp,0,SEEK_END);
    printf("fseek ret=%d\n",ret);
    // ret = ftell(fp);
    long  length2 = ftell(fp);
    printf("ftell ret =%d\n",length2);

    fseek(fp, 0, SEEK_END);
    long length = ftell(fp);
    printf("length = %ld\n",length);

    fclose(fp);
    return ret;
}

char **split(char *str, const char *delim, int *num) {
    char **result = NULL;
    char *token = NULL;
    int count = 0;

    token = strtok(str, delim);
    while (token != NULL) {
        result = (char **)realloc(result, (count + 1) * sizeof(char *));
        result[count] = token;
        count++;
        token = strtok(NULL, delim);
    }

    *num = count;
    return result;
}

void test_split(){
    char str[] = "Hello,World,china,american!";
    int num;
    char **split_str = split(str, ",", &num);

    for (int i = 0; i < num; i++) {
        printf("%s\n", split_str[i]);
    }
    free(split_str);
}

void change_specify_row(int lineNumber){

    int ret = -1;
    FILE *fp = NULL;
    char line_info[256] ;
    char *char_info = "hahahaha";
    
    fp = fopen("myfile1.txt","r+");
    if(fp == NULL){
        printf("can not open file");
        return ret;
    }

    for(int i=0;i<lineNumber-1;i++){
        fgets(line_info,256,fp);
        printf("line_row:%d line info=%s\n",i,line_info);
    }

    fgets(line_info,256,fp);

    // fseek(fp,0,SEEK_SET);
    fwrite(char_info,1,strlen(char_info),fp);
    // fwrite(char_info,1,256,fp);  //这行不行,会出现,无法打开文件情况,上一行可以
    fclose(fp);
    ret = 0;
    return ret;
}


void change_specify_row2(int lineNumber){

    FILE *file;
    char filename[256] ="myfile1.txt";
    char line[256];
    char *linechange= "bbbbbbbbbbbbbbb";

    printf("请输入要修改的文件名: ");
    // scanf("%s", filename);

    file = fopen(filename, "r+");
    if (file == NULL) {
        printf("无法打开文件!\n");
        exit(1);
    }

    printf("请输入要修改的行号: ");

    // 跳过指定行号之前的所有行
    for (int i = 0; i < lineNumber - 1; i++) {
        fgets(line, 256, file);
    }

    // 读取要修改的行
    fgets(line, 256, file);

    // 修改数据
    printf("请输入要修改的数据: ");
    // scanf("%s", line);

    // 删除行尾的换行符
    // linechange[strlen(linechange) - 1] = '\0';
    // linechange[strlen(linechange)] = '\0';

    // 跳到行首,然后写入修改后的数据
    // fseek(file, 0, SEEK_SET);
    fwrite(linechange, strlen(linechange), 1, file);

    // 添加行尾的换行符
    fwrite("\n", 1, 1, file);

    // 关闭文件
    fclose(file);

    printf("修改成功!\n");
    return 0;
}

void change_specify_row3(int lineNumber){

    int ret = -1;
    FILE *fp = NULL;
    char line_info[256] ;
    char *char_info = "hahahaha";
    
    fp = fopen("myfile1.txt","r+");
    if(fp == NULL){
        printf("can not open file");
        return ret;
    }

    for(int i=0;i<lineNumber-1;i++){
        fgets(line_info,256,fp);
        printf("line_row:%d line info=%s\n",i,line_info);
    }

    fgets(line_info,256,fp);   获取第3行数据
    printf("lineNumber:%d content:%s\n",lineNumber,line_info);
    int charlength = strlen(line_info);  //获取第3行数据长度
    int seeklength = ftell(fp);          //获取读完第三行数据的指针位置(length)
    printf("charlength:%d  seeklength:%d\n",charlength,seeklength);

    // fseek(fp,0,SEEK_SET);
    fseek(fp,seeklength-charlength,SEEK_SET);//把指针设置到第三行开头
    for(int i=0;i<charlength-1;i++){   //把第三行的数据都替换成" "
        fwrite(" ",1,1,fp);
        // fwrite("",1,0,fp);
    }
    fseek(fp,seeklength-charlength,SEEK_SET); //把指针设置到第三行开头  
    fwrite(char_info,1,strlen(char_info),fp); //写入数据到第三行
    //为什么这样做,因为如果直接把数据写到第三行,如果原来第三行的数据长度大于这次写的,则不能完全替换;
    //本来想着删除第3行,但是网上的删除,都是把后面的数据从第3行开始重新写,如果后面有10000行,则好像不好
    //我这样有个问题,就是第三行后有很多空格,原因是先把第三行数据用空格替换,然后再写的数据
    // fwrite(char_info,1,256,fp);  //这行不行,会出现,无法打开文件情况,上一行可以
    fclose(fp);
    ret = 0;
    return ret;
}

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值