首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 100分求:如何读取文件中带有关键字一行的内容? [已结贴,结贴人:zam76212171]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zam76212171
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-21 16:20:42 楼主
    由一个文件 file.text  ,其内容如下:

    1 0 0v
    -$
    ERROR -- Invalid device
    R1 1 2 500
    .LIB
    D1 2 3 D1N4002
    D2 4 2 D1N4002
    V1 3 0 2
    V2 0 4 1
    .DC VIN -4 4 0.01
    .PROBE


    现在想读取 带ERROR一行的内容,请问怎么做?
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hurryboylqs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 16:27:541楼 得分:5
    一行一行的读取,然后判断
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnzdgs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 5

      2

      13

    发表于:2008-08-21 16:27:582楼 得分:5
    循环逐行读入,然后搜索字符串。如果嫌效率低,可以把文件整个读入(或者用文件映射),搜索关键字,然后在分别向前、后查找换行符(要判断文件开头和结尾)。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • maomaoxiong
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:22:403楼 得分:5
    readline 判断
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yyunffu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:39:294楼 得分:10
    如果用MFC 用StdioFile 类按行读取,分析判断字符就能做到。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zoulie
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:42:565楼 得分:10
    简单点的
    while(fgets(buff,100)!= NULL)
    {
    string str(buff);
    if(str.find("ERROR") != -1)
      找到error;
    ...............
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cftxlin
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:50:086楼 得分:10
    //................
    while(!feof(fp))
    {
    fgets(revBuf, sizeof(revBuf), fp);
    tempBuf = strstr(revBuf, "ERROR");
    if (tempBuf)
      {  cout < < "找到了"; }
    }
    //revBuf, tempBuf均为字符缓冲区。fp文件指针。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • vipczmy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:53:527楼 得分:5
    CSting str;
    int i = str.find("ERROR");

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhb1190
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 18:00:448楼 得分:5
    一行一行的读然后判断,或者使用内存映射,然后查找!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yyunffu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 18:04:099楼 得分:5
    如果文件不大,直接读进内存,分析字符串即可,这没什么难度。
    当然如果文件很大,比如上G或者更大,用映射文件方式读取,效率比较高。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jdifjoifj
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 08:42:0210楼 得分:0
    该回复于2008-08-22 15:14:13被版主删除
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jennyvenus
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 3

      5

      5

    发表于:2008-08-22 10:30:2811楼 得分:0
    别用映射,就fgets行读进来。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • haodingdang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 11:48:5512楼 得分:15
    CStdioFile File;
    File.Open(filename,CFile::modeReadWrite);//打开文件
    CString str;
    while(File.ReadString(str))
    {
    if(strstr(str,"ERROR")!=0)
    {
    //str为带ERROR一行的内容
    }
    }
    File.Close();
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hxingz
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 11:57:3313楼 得分:10
    引用 12 楼 haodingdang 的回复:
    CStdioFile File;
    File.Open(filename,CFile::modeReadWrite);//打开文件
    CString str;
    while(File.ReadString(str))
    {
    if(strstr(str,"ERROR")!=0)
    {
    //str为带ERROR一行的内容
    }
    }
    File.Close();

    同意这个,不过最好在Open和Read的时候加上异常捕获
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hxingz
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 12:07:0114楼 得分:15
    C/C++ code
    CStdioFile File; CString str; try { File.Open(filename,CFile::modeReadWrite);//打开文件 while(File.ReadString(str)) { if(str.Find("ERROR", 0) != -1) { //str为带ERROR一行的内容 break; } } } catch (...) { AfxMessageBox("Read Error!"); } File.Close();

    最好写成这样!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jia_xiaoxin
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 16:10:3715楼 得分:0
    先读取每一行,再在每一行查找关键字
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved