16.01.2019 - Dateiverarbeitung und Stringparsing
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
char zeichen;
// Zustandsautomat
bool inStartTag = true;
string buffer = "";
string outputString = "";
ifstream eingabe;
eingabe.open("participants.xml");
if (eingabe) {
while(!eingabe.eof()) {
eingabe.get(zeichen);
switch(zeichen) {
case '<':
buffer = "";
inStartTag = true;
break;
// Vermutet: schließendes Tag
case '/':
buffer = "";
inStartTag = false;
break;
case '>':
if (inStartTag) {
outputString += "\nOeffnendes Tag: ";
outputString += buffer;
inStartTag = false;
}
buffer = "";
break;
default:
buffer += zeichen;
break;
}
}
} else {
cout << "File doesn\'t exist.";
}
cout << outputString;
eingabe.close();
return 23;
}
Ergänzte Teillösung:
#include
#include
#include
using namespace std;
int main() { //int kann kein void zurückgeben
char zeichen;
enum zustand {
startTag,
inhalt,
endTag,
};
zustand zustand = startTag;
string buffer = "";
string outputString = "";
ifstream eingabe;
eingabe.open("participants.xml");
if (eingabe) {
while (!eingabe.eof()) //solange datei nciht endet laufe weiter
{
eingabe.get(zeichen);
switch (zeichen) {
case '<':
if (zustand == inhalt && buffer != "") {
outputString += "\nTaginhalt: "; //Zeichenkette an die etwa beigefügt wird
outputString += buffer; //buffer in outputstring laden
}
buffer = ""; //buffer geleert
break;
//vermutet schließendes Tag
case '/':
buffer = "";
zustand = endTag;
break;
case '>':
if (zustand == startTag) {
outputString += "\nOeffnendes Tag: "; //Zeichenkette an die etwa beigefügt wird
outputString += buffer; //buffer in outputstring laden
zustand = inhalt;
} else if (zustand == endTag) {
outputString += "\nSchliessendes Tag: ";
outputString += buffer;
zustand = startTag;
}
buffer = "";
break;
default:
buffer += zeichen; //speichere aktuelles zeichen im buffer
break;
}
}
} else {
cout << "File doesnt exist.";
}
cout << outputString;
eingabe.close();
return 23;
}