Hy,

I'm quite new in the field of C++ but I have the following problem:

The adjacent code was made to read, sort and output data from a large .txt file into a new one.
Since I don't need all data I want to define that the program is just reading data from headers I define. That means that the program only need to read data from the following two headers: "forces from reactions at point ties:" and "forces from reactions at restrained faces :" I have attached the file for a better understanding.

The line where the program is reading those headers is line: "} else if (line.find(':') != string::npos) {"
Now I need to define a bool-variable that returns "true" if one of the two headers has been read.
If not, proceed reading....

I hope you understand my problem and thank you for your help in advance...
Code:
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <stdlib.h>
#include <fstream>
using namespace std; 
class myItem {
public:
myItem(int T, int S, int I, const string& L): Time(T), Section(S), Id(I), Line(L) {}
int Time, Section, Id;
string Line;
bool operator < (const myItem& o) const {
if (Section != o.Section) return Section < o.Section;
if (Id != o.Id) return Id < o.Id;
return Time < o.Time;
}
}; 
int main() {
string line;
string header1 = "FORCES FROM REACTIONS AT POINT TIES:";
string header2 = "FORCES FROM REACTIONS AT RESTRAINED FACES :";
vector <string> Sections, TableHeads;
vector <myItem> AllData;
int curTime, curSection, curId;
// INPUT
while (getline(cin,line).good()) {
cerr << line << endl;
char dummy;
if (sscanf(line.c_str()," SOLUTION AT RAMP POINT %*d TIME %d",&curTime) == 1) { 
// A new ramp point and time, restart sections
curSection = -1;
} else if (line.find(':') != string::npos) {
// A new heading
string tablehead;
getline(cin,tablehead);
curSection++;
if (Sections.size() <= curSection) {
Sections.push_back(line);
TableHeads.push_back(tablehead);
}
} else if (line.find_first_not_of("- \r\n\t")==string::npos) {
// ignore line
} else {
// data line
int curId = line[0] == '*'? (~0u)>>1 : atoi(line.c_str());
AllData.push_back(myItem(curTime,curSection,curId,line));
}
}
// SORT
sort(AllData.begin(), AllData.end());
// OUTPUT
std::ofstream output ("//gt//home//h113027//GT26//forces_moments//final1//output.txt"); 
curSection = -1; curId = -1; 
for (vector<myItem>::iterator i=AllData.begin(); i!= AllData.end(); i++) { 
if (i->Section != curSection) { 
curSection = i->Section; 
curId = -1; 
output << Sections[curSection].c_str() << std::endl; 
} 
if (i->Id != curId) { 
curId = i->Id; 
output << "\nTime " << TableHeads[curSection].c_str() << std::endl; 
} 
output << i->Time << std::endl << i->Line.c_str() << std::endl; 
} 
output.close(); 
}
Attached Files
File Type: zip forces_prt.zip (223.8 KB, 5 views)