用分隔符分隔行以解析文本文件
Split lines by delimiter to parse a text file
我正在写一个程序,它接受一个像这样的txt文件:
foo.txt:
Aaaa/NGACG/NGAA//
Aaab/AGGGC//
Aaac/CTN/AGGC/NNA//
在每一行中,它将ID (Aaa..)存储到一个向量中(每个值存储一次),并将值用/分隔成字符串。
所以第一行是:
foo.push_back("Aaaa");
string bar = NGACG;
foo.push_back("Aaaa");
string bar2 = NGAA;
伪代码是这样的:
while (not end of file)
{
while (not end of line)
{
while (next char isn't /)
{
temporary string x += char
}
foo.push_back(string) //ID
while (next char isn't /)
{
string bar += char //value
}
}
}
我的伪代码显然有缺陷,但这是我想要做的一般想法。我查阅了有关如何解析的指南,但没有什么能真正满足我的目的。我怎样才能做到这一点而又不会完全没有效率呢?如果不使用任意数量的while循环
你可以用传统的C方法处理fgets
和strtok
:
char line[SIZE]; // make sure SIZE is greater than your longest input line ...
char *ix;
while(fgets(line), SIZE, fdin) {
line[strcspn("n")] = ' '; // remove EOL
ix = strtok(line, "/");
foo.push_back(string(ix));
string bar = string(strtok(NULL, "/"));
string bar2 = string(strtok(NULL, "/"));
...
}
或者您可以使用带有分隔符参数的stringstream
和std::getline
:
string line;
while(getline(fdin, line)) {
string temp, bar, bar2;
istringstream is(line);
getline(is, temp, '/');
foo.push_back(temp);
getline(is, bar);
getline(is, bar2);
...
}
当然,您应该添加错误条件的测试…
您可以将行(或整个文件)读取为简单的char数组,并直接使用已读取的行:只需将/
替换为' '
,并将char指针指向下一个char,而无需复制任何内容。null字节终止原始数据中斜杠之间的"值",并且在所有意图和目的中都是自己的C字符串。
相关文章:
- 文本文件中的单词链表
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将值从二维数组输出到文本文件
- 如何在c++中从文本文件中逐行读取整数
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何从文本文件中读取值和数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- C++试图读取一个文件并输出到另一个文本文件
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 已修改的LinkedList未在文本文件本身中更新
- C++文本文件的获取线
- 为什么C++的文件 I/O 在读取文本文件时忽略初始空行?我怎样才能让它不这样做?
- 打印逐行存储的文本文件
- C++文本文件输入