C++ 读取文件内容,分割出字符串
2017-06-01 18:50
666 查看
在c++/c等,经常有需要从文件读取参数值的场景,非常常用,实现的细节主要有,读取文件内容/行,按要求分割成字符串,或者编成键值对供调用。
1.如果是每行都是字符串+空格+字符串形式的话,
最简单的是采用输出输入流的方法,比如伪代码:
如果sline = “x y z”;
那么经过上述操作后,a=x; b=y; c=z;
关于打开文件的ifstream的类,还有fstream,ofstream,参考这篇博文吧;或者:http://www.cplusplus.com/doc/tutorial/files/
2. 也可以采用其他方法,比如转为char 型,或者就用char型,然后用strtok函数,string char 型,调用c_str() ,用法strtok(char *,分隔符),详见链接例子。
另外string还有 find/substr()方法可用,用法 substr(pos,len);
3.文件内容丰富的,比如有注释,参数采用键值对的形式说明,比如:dir=./src/parameters.txt之类的,提供一个范例:
调用方法示例:
parameters.txt里面的内容示例:
1.如果是每行都是字符串+空格+字符串形式的话,
最简单的是采用输出输入流的方法,比如伪代码:
ifstream fsf(文件路径); //只能读取一行,多行的话用循环,以fsf.eof,fsf.good或者确定行数为终止条件 getline(fsf, sline); stringstream ss; string a,b,c; ss<<sline; ss>>a>>b>>c; fsf.close();
如果sline = “x y z”;
那么经过上述操作后,a=x; b=y; c=z;
关于打开文件的ifstream的类,还有fstream,ofstream,参考这篇博文吧;或者:http://www.cplusplus.com/doc/tutorial/files/
2. 也可以采用其他方法,比如转为char 型,或者就用char型,然后用strtok函数,string char 型,调用c_str() ,用法strtok(char *,分隔符),详见链接例子。
另外string还有 find/substr()方法可用,用法 substr(pos,len);
3.文件内容丰富的,比如有注释,参数采用键值对的形式说明,比如:dir=./src/parameters.txt之类的,提供一个范例:
#include <string> #include <map> using namespace std; //定义一个读取参数文件的类 class ParameterReader { public: ParameterReader( string filename = "/home/lab/CalAngle/parameters.txt") { ifstream fin(filename.c_str()); if (!fin) { cerr<<"parameter file misseed"<<endl; return; } while(!fin.eof()) //eof(): 如果读文件到达文件末尾,返回true。else :fail() etc. { string str; getline(fin,str); if (str[0] == '#') { // 以‘#’开头的是注释 continue; } int pos = str.find("="); if (pos == -1) continue; // 找到"="的位置,以此为界,前面是键,后面是值 string key = str.substr( 0, pos ); string value = str.substr( pos+1, str.length() ); data[key] = value; //include all bad situations if ( !fin.good() ) break; } } //接口函数,提供“键”,对象调用这个方法就可以获得“值” string getData(string key) { map <string,string>::iterator iter = data.find(key); if (iter == data.end()) { cerr<<"Parameter name "<<key<<"not found!"<<endl; return string ("NOT FOUND!"); } return iter->second; //second is the value, first is the key } public: map <string,string> data; };
调用方法示例:
ParameterReader pd; string rgbDir = pd.getData("rgb_dir");
parameters.txt里面的内容示例:
# 等号附近没有空格 # 数据所在目录 rgb_dir=/home/lab/CalAngle/data/fr1_desk/rgb/ # 最小匹配数量 min_good_match=10 ...
相关文章推荐
- c++字符串分割 和 c++读取文件内容
- c++ 读取txt文件,split分割字符串
- C++ 读取文件内容至当前文件长度的字符串中
- 从txt文件读取内容并进行字符串分割
- C++读取文件中的内容
- C++读取一行文本文件内容
- 使用ifstream和getline读取文件内容[c++]
- C++读取以空格作为数据区分标记,以回车为行标记的txt文件到一个整数数组(字符串妙用)
- c++怎么读取文件中的中文字符串的几种方法
- Java读取文件内容并转换为字符串
- C++ 使用string::getline读取文件内容,sstream::stringstream
- 使用ifstream和getline读取文件内容[c++]
- 使用ifstream和getline读取文件内容[c++]
- 使用ifstream和getline读取文件内容[c++]
- Java读取文件内容并转换为字符串
- c/c++: 读取配置文件(文本)内容的简单实现
- 使用ifstream和getline读取文件内容[c++]
- 使用ifstream和getline读取文件内容[c++]
- 使用ifstream和getline读取文件内容[c++]
- 使用ifstream和getline读取文件内容[c++]