C语言实现文件内容的替换

zhaoxr 2013-05-20 09:33:49
做毕设遇到点小问题,现在需要先写一个文件,然后在里面设置了一个标记变量(Flag),然后需要在程序中能够将它用另一常量的值替换掉(如a=30.5),以前学习C的时候对文件操作没怎么学,希望有懂的人帮个忙,最好是能附带代码。
...全文
1002 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gonefar 2013-05-20
  • 打赏
  • 举报
回复
先逐块的把文件读到一个buffer里,然后对所要修改的位置字符进行修改,再把修改后的buffer内容写到新文件里。
赵4老师 2013-05-20
  • 打赏
  • 举报
回复
仅供参考
#include <stdio.h>
#include <string.h>
char s[256];
char *p;
int r,n,i;
int main() {
    while (1) {
        printf("请输入一行文字(空行结束),\"%%20\"将替换为\" \",\"你懂得\"将替换为\"XXXXXX\":\n");
        fgets(s,256,stdin);
        if ('\n'==s[0]) break;
        p=s;
        while (1) {
            p=strstr(p,"%20");
            if (p) {
                memmove(p+1,p+3,strlen(p)-3+1);
                p[0]=' ';
            } else break;
        }
        p=s;
        while (1) {
            p=strstr(p,"你懂得");
            if (p) {
                memmove(p+6,p+6,strlen(p)-6+1);
                for (i=0;i<6;i++) p[i]='X';
            } else break;
        }
        printf("%s",s);
    }
    return 0;
}
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//abcdefg%20helloworld%20something.pdf
//abcdefg helloworld something.pdf
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//这是测试文字你懂得,在这个你懂的地方,就得做你懂得的事
//这是测试文字XXXXX,在这个你懂的地方,就得做XXXXX的事
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//
zhaoxr 2013-05-20
  • 打赏
  • 举报
回复
麻烦各位懂的人多帮帮忙
zhaoxr 2013-05-20
  • 打赏
  • 举报
回复
你好,首先非常感谢你,你说的那些思想我都懂,但是代码看的不是很懂,其实我是写的这个文件输出后是网页,只是在显示的时候需要把设置变量位置的换成常量显示出来,也不知道我讲清楚没有
上图就是提前写的文件,我需要在程序中将红圈的变量替换成常量值(如$FLAG1$替换成35.3),然后浏览器调用显示出来
赵4老师 2013-05-20
  • 打赏
  • 举报
回复
仅供参考:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
FILE *f;
char ln[64+1];//Because sscanf(argv[66],"%hx",&ln[66-3]); modify ln[63] and ln[64] !
int i,j,k;
long location;
void main(int argc,char *argv[]) {
    if (argc<=3) {
        cprintf("Locate & Replace, designed by Zhao Zhong\n\r");
    HELP:
        cprintf("Usage: LR filename.ext location byte1 byte2 byte3 ...");
        return;
    }
    if (argc>64+3) {
        cprintf("Up to 64 bytes\a");
        return;
    }
    if ((f=fopen(argv[1],"r+b"))==NULL) {
        cprintf("Can not open %s\a",argv[1]);
        return;
    }
    if (1!=sscanf(argv[2],"%lx",&location)) {fclose(f);goto HELP;}
    if (location>=filelength(fileno(f))) {
        cprintf("Location too large\a");
        fclose(f);
        return;
    }
    for (i=3;i<argc;i++) {
        if (1!=sscanf(argv[i],"%hx",&ln[i-3])) {fclose(f);goto HELP;}
    }
    if (fseek(f,location,SEEK_SET)) {
        cprintf("fseek to %lx fail\a",location);
        fclose(f);
        return;
    }
    if ((int)fwrite(ln,1,argc-3,f)!=argc-3) {
        cprintf("fwrite %d bytes fail\a",argc-3);
        fclose(f);
        return;
    }
    fclose(f);
}
赵4老师 2013-05-20
  • 打赏
  • 举报
回复
所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 不要把 fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了
zhaoxr 2013-05-20
  • 打赏
  • 举报
回复
能具体写一下关键代码吗?请你帮帮忙吧

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧