Hi all,
I am working on a data file that looks like the following:
value1: 0.7586 +/- 0.00473
value2: 0.664901 +/- 0.0357
value3: 0.662784 +/- 0.00447
-------------------------------------------------------------------------------------------------------------------------
value1: 0.765217 +/- 0.00425
value2: 0.694663 +/- 0.0277
value3: 0.66438 +/- 0.00393
-------------------------------------------------------------------------------------------------------------------------
value1: 0.758317 +/- 0.00332
value2: 0.648057 +/- 0.0201
value3: 0.660746 +/- 0.0035
-------------------------------------------------------------------------------------------------------------------------
value1: 0.767888 +/- 0.00442
value2: 0.67536 +/- 0.0228
value3: 0.669564 +/- 0.00418
------------------------------------------------------------------------------------------------------------------------
So it is 4 sets of value1 to 3 which are seperated by a dash line. I want to print out numbers in front of value1, value2 and value3 in each set. I started by writing a code that is finding the first value1 and tries to print its value. I wrote the following piss of code:
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int firstMatch(string w,string s,int startPos,int endPos){
if(startPos==-1)return -1;
int t[s.size()];
int pos = 2;
int cnd = 0;
t[0] = -1; t[1] = 0;
while (pos <w.size()){
if (w[pos - 1] == w[cnd]){
t[pos] = cnd + 1; pos = pos + 1; cnd = cnd + 1;
}
else if (cnd > 0){
cnd = t[cnd];
}
else{
t[pos] = 0; pos = pos + 1;
}
}
int m=startPos;
int i=0;
while (m + i < endPos){
if (w[i] == s[m + i]){
i++;
if (i==w.size())
return m;
}else{
m = m + i - t[i];
if (t[i] > -1)
i = t[i];
}
}
return -1;
}
int firstMatch(string w,string s, int startPos){
if(startPos==-1)return -1;
return firstMatch(w,s,startPos,s.size());
}
int firstMatch(string w,string s){
return firstMatch(w,s,0);
}
main(){
string sentence,tmp;
ifstream fin("file.xml");
while(fin>>tmp)sentence+=tmp;
int start = 0,end=0;
while(start != -1){
start = firstMatch("value1",sentence,start+1);
int ind = start +8;
end = firstMatch("\n",sentence,start+1);
string t = "";
for(int i=ind+1;i<end;i++){
if(sentence[i]>='0'&&sentence[i]<='9')
t+=sentence[i];
else
t+=' ';
}
if(start==-1)break;
if(ind == -1)continue;
istringstream iss(t);
int a1,a2;
iss>>a1>>a2;
cerr<<a1<<'\t'<<a2<<'\t'<<endl;
}
}
But using this code I a getting
0 4198195
0 4198195
0 4198195
Could you please help me with this.