Beispiel 6: enum zustand

13.12.2016 04:31 Uhr
#include <iostream>
using namespace std;
#include <fstream>

int main()
{
char zeichen;
char puffer[100];
int zaehler;
enum zustand { zwischenTags, inNamen, erwarteAttributNamen, erwarteAttributWert,
               verarbeiteAttributWert} ;
enum zustand zustand;

ifstream eingabe;

eingabe.open("daten2.xml");

for (zaehler=0,zustand=zwischenTags;;)
    {
    eingabe.get(zeichen);
    if (eingabe.eof()) break;

   switch(zeichen)
      {
   case '<':
      zustand=inNamen;
      zaehler=0;
      break;

   case '>':
      zustand=zwischenTags;
      break;

   case ' ':
// Wenn wir bisher einen Tagnamen gelesen haben, endet er.
      if (zustand == inNamen)
         {
         zustand = erwarteAttributNamen;
         puffer[zaehler] = '\0';
         cout << "Name des Tags: " << puffer << endl;
         zaehler=0;
         }
      else if (zustand == verarbeiteAttributWert)
         {
         puffer[zaehler] = zeichen;
         zaehler++;
         }
      break;

   case '=':
      if (zustand == erwarteAttributNamen)
         {
         zustand = erwarteAttributWert;
         puffer[zaehler] = '\0';
         cout << "Name des Attributs: " << puffer << endl;
         zaehler=0;
         }
      else if (zustand == verarbeiteAttributWert)
         {
         puffer[zaehler] = zeichen;
         zaehler++;
         }
      else cout << "Fehlerhaftes Zeichen! '='" << endl;
      break;

   case '"':
      if (zustand == erwarteAttributWert) 
         {
         zustand = verarbeiteAttributWert;
         zaehler = 0;
         }
      else if (zustand == verarbeiteAttributWert)
         {
         zustand = erwarteAttributNamen;
         puffer[zaehler] = '\0';
         cout << "Wert des Attributs: " << puffer << endl;
         zaehler=0;
         }
      else cout << "Fehlerhaftes Zeichen! '\"'" << endl;
      break;

   default:
      if (zustand != zwischenTags)
         {
         puffer[zaehler] = zeichen;
         zaehler++;
         }
      break;
      }
   }
eingabe.close();
}

Anhang: example6.zip

Schlagwörter: