侧边栏壁纸
  • 累计撰写 218 篇文章
  • 累计创建 59 个标签
  • 累计收到 5 条评论

C++ 同时处理文本文件和 gz 文件

barwe
2023-03-13 / 0 评论 / 0 点赞 / 1,167 阅读 / 1,046 字
温馨提示:
本文最后更新于 2023-03-13,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

C++ 同时处理文本文件和 gz 文件

我们通常可以这样遍历一个文本文件:

#include <iostream>
#include <string>
using namespace std;

int main() {
    const char *filename = "some.fq";
    ifstream infile(filename);
    string line;
    long n = 0;
    while (getline(infile, line)) {n++;}
    cout << n << endl;
    infile.close();
    return 0;
}

gzstream 库提供了和上面非常类似的读写 gz 文件的方式。

首先我们安装这个库:https://www.cs.unc.edu/Research/compgeom/gzstream/。

可以装到系统默认路径中,也可以直接放到我们需要用的项目下面。

下载已经编译好的 gzstream,解压后可以在里面找到这两个文件:

  • gzstream.h: 用于写脚本时引入
  • libgzstream.a: 用于编译我们的脚本

基本用法:

#include <iostream>
#include <string>
#include "gzstream/gzstream.h"
using namespace std;

int main() {
    const char *filename = "some.fa.gz";
    igzstream infile(filename);
    string line;
    long n = 0;
    while (getline(infile, line)) {n++;}
    cout << n << endl;
    infile.close();
    return 0;
}

这里我们将 gzstream 解压到测试脚本的同级目录:

|-- test.cc
|-- gzstream/
    |-- gzstream.h
    |-- libgzstream.a

然后编译链接:

g++ test.cc -L./gzstream -lgzstream -lz -o test.exe

然后执行:

./test.exe

知识点:

  • -L/path/to/lib 指定静态库或者动态库文件所在的位置,可以是相对路径
  • -lxxx 指定静态库或者动态库的名称,例如
    • 系统提供的库一般都有简称,例如 -lz 表示链接到 zlib 库
    • gzstream 提供的静态库是 libgzstream.a,去掉 lib- 前缀和 .a 后缀就是我们需要填写的库名
0

评论区