提问人:David Li 提问时间:1/19/2016 最后编辑:ZieziDavid Li 更新时间:1/19/2016 访问量:1668
如何从文件 c++ 中读取数据
How to read data from file c++
问:
我有一个文件组织如下:data.txt
nodeNum 10 NodeId 坐标 0 0 0 1 1 1 2 2
2 3 3 3 4 4
4 5 5
5 6 6 6
6 7 7
7 8 8
8 9 9 9 边(从 i 到 j) 权重
0 1 1.5 1 1 2.1 2 1 3.3 3 1 4.0
4 1
5.0
5 1 6.6
6 1 3.7
7 1 8.1
8 1
9.3
9
1
10.2
如何读取和存储数据,如下所示:
int nodeNumber; // <--------- get and store number in line number 2 in text file.
std::vector<Node> nodes(nodeNumber);
double x1, y1;
for (int i=0; i< nodeNumber; i++) {
nodes.at(i) = g.addNode();
x1 , y1 //<-- x1 and y1 store coordinate from line 4 to line 4 + nodeNum, respectively
coord[nodes.at(i)].x=x1;
coord[nodes.at(i)].y=y1;
}
从线路:
边(从 i 到 j) 权重 //(行号 3+nodeNum (=3+10) ) 到最后。
i <-- 第一个数字,j <-- 第二个数字,z[i,j] < ---第三个数字。
我不知道这样做。谁能帮我?
答:
1赞
Thomas Matthews
1/19/2016
#1
我建议使用 or 来表示文件中的一行数据。接下来是重载以读取数据(并选择性地删除换行符)。class
struct
operator>>
struct Coordinate
{
int x, y, z;
friend istream& operator>>(istream& input, Coordinate& c);
};
istream& operator>>(istream& input, Coordinate& c)
{
input >> x >> y >> z;
return input;
}
坐标向量的输入循环变为:
std::vector<Coordinate> points;
Coordinate c;
while (data_file >> c)
{
points.push_back(c);
}
读取非坐标时,输入将失败。此时,清除流状态并读取边缘记录。
评论
0赞
Ziezi
1/19/2016
是否可以修改为逐行读取文件并仅提取数值?
1赞
Thomas Matthews
1/19/2016
是的。抬头看一下。因此,您将使用 .C++ 这种方式很好,因为它是派生自 ,不需要对类进行任何更改。std::getline
std::istringstream
data_file
std::istringstream
istringstream
istream
Coordinate
0赞
David Li
1/19/2016
但这只能帮助处理一条单独的路径。如何跳过第 1、3、14 行。如何读取第 2 行并存储在 int nodeNumber 和 STOP,然后声明大小为 nodeNumber 的向量?
0赞
David Li
1/19/2016
我的问题是我不知道如何读取第 2 行将此数字存储到 int nodeNumber,然后停止。然后声明一个之前已经读取过的大小为 nodeNumber 的向量,并继续读取从第 4 行到第 14 行的数字,存储在 ID、x[ID]、y[ID] 中。从第 16 行到最后一行:读 i<- 第一个数字,j < - 第二个数字,z[i][j] 最后一个数字。我经常在互联网上查找,但这无济于事,因为我不聪明。请帮帮我!
评论
fopen
scanf