C++ 提取txt文本中需要的数据

casen_xu 2014-03-27 12:57:22
有一个文本文档,例如下

; 1 1 1 1
2 3 3 2
2 3 3 2
2 3 3 2
2 3 3 2
... ... ... ...

需要提取其中的 3 那两列,并将其保存到另外一个文本文档中,格式像下面这样。

3 3
3 3
3 3
... ...

(注:文档数据有上万行,使用数组好像不太行。)
我在linux下使用awk 很方便就解决了,但是C++不太熟悉,所以请求大神给予解答。多谢。
...全文
424 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
苍蝇①号 2014-03-27
  • 打赏
  • 举报
回复

#include <stdio.h>                                                                                                                
#include <stdlib.h>
#include <string.h>

int main(){

    FILE *in = fopen("in.txt", "r");
    FILE *out = fopen("out.txt", "w");
    char buffer[1024] = ""; 
    while(fgets(buffer, sizeof(buffer) - 1, in)){
        char * ptr = strtok(buffer, " ");
        int flag = 0;
        for(int i=0; i<3 && ptr; ++i){
            if(i > 0 && atoi(ptr) == 3){ 
                flag = 1;
                fprintf(out, "%s ", ptr);
            }   
            ptr = strtok(NULL, " ");
        }   
        if(flag){
            fprintf(out, "\n");
        }   
        
    }   
    fclose(in);
    fclose(out);
    return 0;

}
in.txt: 1 1 1 1 2 3 3 2 2 3 3 2 2 3 3 2 2 3 3 2 out.txt: 3 3 3 3 3 3 3 3
casen_xu 2014-03-27
  • 打赏
  • 举报
回复
@zybjtu 这个思想我知道,但是由于学习的不是C++语言,所以还望给段完整的示例代码。多谢。
zybjtu 2014-03-27
  • 打赏
  • 举报
回复
读取,检测空格或者制表符作为分隔符,定位第二第三列,收集几行写出去。
casen_xu 2014-03-27
  • 打赏
  • 举报
回复
@jmppok 能否给段示例代码。。
jmppok 2014-03-27
  • 打赏
  • 举报
回复
按行读,提取需要的列,写文件。 40多万行不算大,也就是秒秒钟的事。
casen_xu 2014-03-27
  • 打赏
  • 举报
回复
@yang122610 数据格式是固定的,每一列用空格隔开,我C++ 是新手,因为有个临时任务需要用C++处理。还往详细指教一下。
动感超哥 2014-03-27
  • 打赏
  • 举报
回复
如果数据格式是固定的 应该就可以用固定的位置读 这个以前我只读过几万行的 位置数据是乱的 我就是一行数据读然后开个线程处理读到的数据 速度还行
casen_xu 2014-03-27
  • 打赏
  • 举报
回复
@yang122610 总共有40多万行,要提取出来十几万行,所以挨个读,效率会很低。有没有像 awk 那样的处理方法。
casen_xu 2014-03-27
  • 打赏
  • 举报
回复
@derekrose 是按列读,然后把那两列存到另一个文本中。
动感超哥 2014-03-27
  • 打赏
  • 举报
回复
挨个读文件读到要的数据 然后写到文件里?
derekrose 2014-03-27
  • 打赏
  • 举报
回复
需求不太明确啊 按列读?

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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