一、文章概要
- 文件读取
- 文件中逐行读取信息
- 设置 token 提取每一行的有效信息
二、文件读取
比如读取 1.txt,可以将 1.txt 放到可执行文件所在的目录中。
std::ifstream file("1.txt");
或者直接使用全路径
std::ifstream file("D:\\Test\1.txt");
然后简单使用下面的语句判断是否读取成功
if (!file.good())
{
std::cerr << "Failed to open file\n";
return -1;
}
三、文件中逐行读取信息
... 中可以对读取到的每一行字符串 line 进行具体的操作。
std::string line;
while (std::getline(file, line))
{
...
}
当然结束了不要忘了
file.close();
上面提到的 std::getline 是 C++ 标准库中的一个函数,可以从给定的输入流(比如 std::cin 或者std::ifstream等)中读取一行数据。函数的通用原型如下:
std::getline(std::basic_istream<CharT, Traits>& input_stream, std::basic_string<CharT, Traits>& str, CharT delimiter);
其中:
input_stream表示要从哪个输入流中读取数据。str是一个std::string类型的引用,用来保存读取到的字符串。delimiter是一个字符类型(比如char或wchar_t),表示在读取数据时使用的分隔符(默认值为\n)。-
比如按照空格
' '读取就是std::istringstream iss(line);//在iss中读取 std::string token;//读到token中 std::getline(iss, token, ' ');//按照空格分隔
-
四、设置 token 提取每一行的有效信息
find函数是 C++ 标准库中的一个字符串查找函数,用于在一个字符串中查找指定的子串。如果找到了该子串,则返回该子串在原字符串中的起始位置,如果没有找到,则返回std::string::npos。其中std::string::npos用于表示一个无效的位置,find函数的返回值 ==std::string::npos就是没找到。
while (std::getline(file, line))
{
std::istringstream iss(line);
std::string token;
while (std::getline(iss, token, ' '))
{
if (token.find("iWidth=") != std::string::npos) {
std::string strTemp = token.substr(token.find("iWidth=") + 7);
}
else if (token.find("iHeight=") != std::string::npos) {
std::string strTemp2 = token.substr(token.find("iHeight=") + 8);
}
else if (token.find("iImgRectIndex=") != std::string::npos) {
std::string strTemp3 = token.substr(token.find("iImgRectIndex=") + 14);
}
}
}
substr是 C++ STL 中的一个函数,用于获取字符串的子串。- 函数原型如下:
std::string substr(size_t pos = 0, size_t count = npos) const;
其中:
pos:子串起始位置,默认为0,表示从字符串的第一个字符开始。count:子串长度,默认为npos,表示从起始位置开始一直取到字符串的结尾。- 所以上面的代码就是找到指定的字符串后面的字符串了