免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1319 | 回复: 7
打印 上一主题 下一主题

一个简单的文件分析问题,请指教!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-02-20 15:27 |只看该作者 |倒序浏览
一个很简单的问题,

如下文件( /root/test.conf ):

----------------------------
#!/bin/cshK
#

KEY1=1
KEY2=2
KEY3=3
KEY4=4
------------------------------


我要读取文件中KEY3的值,改写KEY2键值为 6,在Linux上,不用脚本,用C怎么实现??
自己写了几个,总感觉太笨!!写了百十行,各位可否指点?!

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2006-02-20 15:43 |只看该作者
while(fgets)
{
      sscanf(tmpstr,"%[^=]",keystr);
     if(keystr eq KEY3)
      get(KEY3_value);
    else if(keystr eq KEY2)
     modify(KEY2_value);
}

论坛徽章:
0
3 [报告]
发表于 2006-02-21 14:01 |只看该作者
不好意思,小弟太笨,没怎么看懂,可不可以写明白一点?
多谢了!

论坛徽章:
0
4 [报告]
发表于 2006-02-21 17:03 |只看该作者
原帖由 cjaizss 于 2006-2-20 15:43 发表
while(fgets)
{
      sscanf(tmpstr,"%[^=]",keystr);
     if(keystr eq KEY3)
      get(KEY3_value);
    else if(keystr eq KEY2)
     modify(KEY2_value);
}

不是c代码吧


这个程序不难,就看效率的高低了。
我想可以把整个文件读到一个缓冲区中去,然后用字符串操作取得/修改相应的参数,然后重新写入文件。

^_^ 修改文本文件是不好玩的

论坛徽章:
0
5 [报告]
发表于 2006-02-22 09:14 |只看该作者
其实我就是不太明白怎么样修改某个键名后的键值,并且要将修改存入文件!!

如将"KEY2=2"改为"KEY2=5",怎么才能将修改反映到磁盘文件上,我一直搞不定!!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2006-02-22 09:21 |只看该作者
1 建立个临时文件,按行读.读了之后写回临时文件.然后用临时文件代替现有的文件.
2 用mmap

论坛徽章:
0
7 [报告]
发表于 2006-02-22 10:27 |只看该作者
还是没搞明白,主要是因为我太急用,实在请各位过客高投贵手,帮个忙!!!

其实我曾今想先用fsetpos()定一下位,然后用fprint()写入,但是这样有一个问题,

比如现在文件有这样两行,

    key1=ff
      key2=ll

如果我想将key1后的键值改为“ooo”的话,就会导致这样的结果

    key1=oo
      oey2=ll

将后面的内容覆盖了,若是想将key1的内容改为"o"的话,又会导致变成这样

    key1=of
      key2=ll

没改全!

想是头痛,其实我想这类操作在Linux的配置文件修改中应改是比较常见的,

有知有没有典型一点的代码片断??

实在请大家帮帮忙!!!!

论坛徽章:
0
8 [报告]
发表于 2006-02-22 10:50 |只看该作者
大概的代码!但只有新键值和原来的键值不一样长就会有问题!

                fpos_t        pos=5;(现在是手工指定的,以后想用分析每行字符数的方法获取写位置)

        while ( fgets(tmp_str, 100, fd) > 0 ){
                if ( !strncmp(tmp_key, "key4=", strlen("key2=")) ){
                        fsetpos(fd, &pos);
                        fprintf(fd, "%s", "wang\n");
                        break;
                }
        }
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP