有一个文件的内容形式如下:序列号(整形) 时间(长整形) 节点1(字符串) 节点2(字符串) 文件路径(字符串) 内容(字符串)例如
1 0 NODE1 NODE2 C:\HELLO this is test
2 900 NODE3 NODE1 D:\ONLY send char
……定义如下变量 int number;
long clockt;
string node1;
string node2;
string filepath;
string str;
[/code首先先存储第一行,运算后的结果是
[code=C/C++]
number = 1;
clockt = 0;
node1 = "NODE1";
node2 = "NODE2";
filepath = "C:\HELLO";
str = "this is test";
第二行与此类似
请问如何实现这样的功能??
1 0 NODE1 NODE2 C:\HELLO this is test
2 900 NODE3 NODE1 D:\ONLY send char
……定义如下变量 int number;
long clockt;
string node1;
string node2;
string filepath;
string str;
[/code首先先存储第一行,运算后的结果是
[code=C/C++]
number = 1;
clockt = 0;
node1 = "NODE1";
node2 = "NODE2";
filepath = "C:\HELLO";
str = "this is test";
第二行与此类似
请问如何实现这样的功能??
#include <string>
#include <iostream>
#include <vector>
using namespace std;void main()
{
ifstream fin("c:\\array.txt");
if(fin == NULL)
return;
string str;
vector<string> v_str;
while(getline(fin, str))
{
string strfind(" ");
string::size_type pos = 0;
string::size_type pos1 = 0;
while( (pos = str.find_first_not_of(str, pos)) != string::npos)
{
pos1 = str.find_first_of(str, pos);
string temp = str.substr(pos, pos1 - pos);
v_str.push_back(temp);
pos = pos1;
}
}
int number;
long clockt;
string node1;
string node2;
string filepath;
string str1;
vector<string>::size_type i = 0;
while(i < v_str.size())
{
if(i + 5 < v_str.size())
{
number = atoi(v_str[i++].c_str());
clockt = atol(v_str[i++].c_str());
node1 = v_str[i++];
node2 = v_str[i++];
filepath = v_str[i++];
str1 = v_str[i++];
}
else
break;
}
}
而且层次清晰!!不容易出错!!
或者可以尝尝鲜,用google公布的所谓内部数据语言,号称解析速度比XML快100倍的Protocol Buffers。