访问文本文件c++的特定行
Accessing specific lines of text file c++
我想访问文本文件中的特定行以显示或修改该行。我的文本文件包含不同长度的行,我听说这些文件不能使用seekg或seekp。我有一个代码,但它不起作用。有人能告诉我其他有用想法的错吗?
#include <fstream>
#include <limits>
#include <string>
#include <iostream>
std::fstream& GotoLine(std::fstream& file, unsigned int num)
{
file.seekg(std::ios::beg);
for(unsigned int i=0; i < num - 1; ++i)
{
file.ignore(std::numeric_limits<std::streamsize>::max(),'n');
}
return file;
}
int main()
{
using namespace std;
std::fstream& GotoLine(std::fstream& file, unsigned int num);
cout << "Starting..." << endl;
fstream file("bla.txt");
GotoLine(file, 8);
string line8;
file >> line8;
cout << "[" << line8 << "]" << endl;
// cin.get();
cout << "Finished..." << endl;
return 0;
}
string line8;
file >> line8;
将仅提取,直到命中第一个空白字符为止。
你可以使用类似的东西:
string line8;
getline(file, line8);
这至少对我来说适用于您在带有VS2012 的Windows7上的其余代码
标准C++11(以及该标准的早期版本)没有包含在文件中的行的概念。POSIX(甚至Windows或MacOSX)也没有。文本文件通常包含可变长度的行(只有行终止符是相关的,n
、rn
或nr
,这取决于操作系统,可能还取决于文件读取模式(二进制或文本)。
在20世纪60年代或70年代,IBM大型机OS/360操作系统有"文件"系统,这些系统确实有由固定长度的线组成的文件,模仿穿孔卡
因此,您必须逐行读取文件,并记住行限制在哪里(或者使用std::istream::ignore跳过直到n
)。或者,在std::ifstream
-s上使用std::getline将文件的每一行读取到std::vector<std::string>
中。
对于/etc/fstab
(或/proc/mounts
)来说,读取矢量中的所有行是个好主意,因为它总是一个小文件。它通常只有不到几十行,每行通常不到一百个字符。病理病例可能是一个有数千行评论的文件,但这在实践中并没有真正发生。
相关文章:
- 文本文件中的单词链表
- 从命令行c++发送文本文件名
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将值从二维数组输出到文本文件
- 如何在c++中从文本文件中逐行读取整数
- 如何创建一个QTableWidgetItem,用长文本右对齐,左边有省略号
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何从文本文件中读取值和数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- 如何根据单词在文本中出现的概率输出单词
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- C++试图读取一个文件并输出到另一个文本文件
- 如何通过套接字将文本文件的内容从服务器发送到客户端