A
Hi Sunny31,
Habe mal auf eigene Faust versucht ein paar Änderungen zu implementieren.
Habe noch einen kleinen Haken drin (Zeile 46). Möchte einfach definieren, dass nicht alle Daten gelesen werden, sondern nur Daten von zwei verschiedenen Headern:
#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 if (tablehead==header1 || tablehead==header2) {
// data line
int curId = line[0] == '*'? (~0u)>>1 : atoi(line.c_str());
AllData.push_back(myItem(curTime,curSection,curId,line));
} else {
// ignore 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();
}
Du hast mir wirklich schon gute Ratschläge gegeben, hoffe du hast hierfür auch eine passende Information bei der Hand
Grüsse