作者TwoDemon (飞天)
看板C_and_CPP
标题[问题] C++ parse file 问题
时间Wed Jul 26 10:07:17 2017
开发平台(Platform): (Ex: Win10, Linux, ...)
Linux
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
gcc version 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)[B
问题(Question):
Q1 最後一栏parse 只能到小数点一位,例如吃入资料 只能吃到 10404.7
小数第2栏不见了。
^^^^^^^^^^^^^^^^^^^
已解决,parse 无误,原因是cout 加上 setprecision(7) 即可正确显示。
Q2 如果档案格式是用tab 分隔,friend 这边要怎麽改??
friend std::istream & operator >>(std::istream &in, index_t &p) {
char c;
in >> p.f1 >> c >> p.f2 >> c >> p.f3 >> c >> p.f4 >> c >> p.f5 >> c >> p.f6;
return in;
}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
尚不知如何改
喂入的资料(Input):
0 20170706 1 0 0 10404.79
562 20170706 1 0 94645 10365.74
Sample Code:
struct index_t {
int f1;
int f2;
int f3;
int f4;
int f5;
double f6;
friend std::istream & operator >>(std::istream &in, index_t &p) {
char c;
in >> p.f1 >> c >> p.f2 >> c >> p.f3 >> c >> p.f4 >> c >> p.f5 >> c >> p.f6;
return in;
}
};
vector<index_t> g_v_index;
int main()
{
string fileName="/tmp/test.txt";
ifstream fin(fileName.c_str(), ifstream::in);
/* ex:
1 20170706 1 0 0 10404.99
2 20170706 1 0 94645 10365.98
*/
for(vector<index_t>::const_iterator iter = g_v_index.begin();
iter != g_v_index.end();
++iter)
std::cout
<<iter->f1<<" "
<<iter->f2<<" "
<<iter->f3<<" "
<<iter->f4<<" "
<<iter->f5<<" "
<< setprecision(7) << iter->f6
<<std::endl;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.222.218.2
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1501034842.A.E24.html
1F:→ TwoDemon: 问题应该是出在 friend std::istream & operator >>(std 07/26 10:07
2F:→ TwoDemon: 只是小弟我不知怎麽修改 ^^||| 烦请高手指教一下 07/26 10:08
3F:→ TwoDemon: Q1 已解,原来是 cout 的问题 改用 setprecision(7) 07/26 10:53
※ 编辑: TwoDemon (60.250.19.162), 07/26/2017 10:57:34
4F:→ stucode: 把>> c全部拿掉就好了 stream自己会处理空白(包括\t) 07/26 13:13
5F:→ TwoDemon: 感谢,真的 OK 了 07/27 10:40