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;
}