我知道在SO(和其他地方)已经讨论了很多。因为我仍然被困,所以我在这里求助。也许我正在做一些真正无脑/愚蠢的事情,或者说这可能是真正的问题...
我有一个文件目录,每个目录都有扩展名' .pts' - 打开一个揭示:
版本:1
n_points:68
{
498.801220 504.771171
516.076459 571.681686
518.038170 628.516761 ...
此处粘贴会使格式错误一点,因此请注意每行数据之间没有空行。这些浮子对中也有68个,但我在这里省略了它们。
最终我想要一对对齐的矢量作为圆形短裤 - 例如499,505,516,572,518,629 ......
但目前我无法按原样访问花车,更不用说任何信息了。
到目前为止的代码:
#include <iostream>
#include <string>
#include "dirent.h"
#include <fstream>
#include <sstream>
#include <stdio.h>
using namespace std;
bool has_suffix(const string& s, const string& suffix)
{
return (s.size() >= suffix.size()) && equal(suffix.rbegin(), suffix.rend(), s.rbegin());
}
int main(int argc, char **argv)
{
string path = "C:\\testset";
DIR *dir = opendir(path.c_str());
if(!dir)
{
return 1;
}
dirent *entry;
string fileName;
float number;
string dummy;
while(entry = readdir(dir))
{
if(has_suffix(entry->d_name, ".pts"))
{
fileName = entry->d_name;
fileName = path + "\\" + fileName; // <<added at suggestion of Martin James
//Working up to here as I see all the .pts files listed when I print them:
cout << fileName << endl;
ifstream file(fileName, std::ios_base::in);
//however from here:
while (file >> number)
{
//...nothing will print
printf("%f ", number);
}
file.close();
}
}
closedir(dir);
}
查找所有.pts文件正在运行(感谢SO :)上的其他线程 - 并且它们在文本编辑器中打开时看起来确实是简单的.text文件。有一个&#39; LF&#39;在每一行的末尾。
问题是运行代码只会导致列出文件名。似乎&#34;而(文件&gt;&gt;数字)&#34;没有返回任何内容来运行print语句。事情是,主题上的其他主题(至少对我而言)表明它就像这样简单。
我觉得答案可能会涉及到我在过去几个小时里看过的事情 - 虚拟字符串变量,以吸收文件顶部的所有内容我不会这样做。需要吗?函数getline? &#39;令牌&#39 ;?我会告诉你我所有的努力,但我不想陷入这个问题:
鉴于上面格式化的txt文件,您如何访问第4行以后的值?
任何帮助都非常感谢:)
答案 0 :(得分:2)
这里的问题是,您没有阅读标题信息。 >>
操作失败,因为您尝试将字符串“version:1”作为float读入。
要解决此问题,您应该跳过标题,只需调用std::getline
,或者解析它以获取有关内容的信息。
编辑:要跳过您可以执行的操作:
for(int i=0;i<3;i++) //Skip header
std::getline(file,dummy);