Beispiel 3 (Nicht kompilierbar)

13.12.2016 07:31 Uhr
#include <iostream>

using namespace std;
#include <fstream>

int main()
{
char zeichen;
char puffer[100];
int zaehler;
/* Idee: Um die unten aufgeführten Bedingungen
   zu prüfen, verwenden wir eine Variable um festzuhalten, in welcher 
   Verarbeitungsphase wir sind. */
int zustand;
/* Dabei möge gelten:
   zustand = 0 : Wir sind "zwischen den Tags".
   zustand = 1 : Wir bearbeiten einen Tagnamen.
   zustand = 2 : Wir erwarten einen Attributnamen.
   zustand = 3 : Wir erwarten einen Attributwert.
   zustand = 4 : Wir verarbeiten einen Attributwert. */

ifstream eingabe;

eingabe.open("daten1.xml");

// Auch die Zustandvariable wird initialisiert.
for (zaehler=0,zustand=0;;)
    {
    eingabe.get(zeichen);
    if (eingabe.eof()) break;

// Wir verarbeiten die einzelnen Zeichen in Abhängigkeit davon, welche es sind.
   switch(zeichen)
      {
   case '<':
// Ein neues Tag beginnt.
      zustand=1;
      zaehler=0;
      break;

   case '>':
// Ein Tag endet.
      zustand=0;
      break;

   case ' ':
// Wenn wir bisher einen Tagnamen gelesen haben, endet er.
      if (zustand == 1)
         {
         zustand = 2;
         }
// Wenn wir einen Attributwert lesen, ist es ein normales Zeichen, das
// gespeichert wird.
      else if (zustand == 4)
         {
//       Zeichen speichern.
         }
// Sonst ignorieren wir es.
      break;

   case '=':
// Wenn wir einen Attributnamen gelesen haben, endet er.
      if (zustand == 2)
         {
         zustand = 3;
         }
// Wenn wir einen Attributwert lesen, ist es ein normales Zeichen, das
// gespeichert wird.
      else if (zustand == 4)
         {
// Zeichen speichern.
         }
// Sonst melden wir einen Fehler.
      else ...
      break;

   case '"':
// Wenn wir einen Attributwert erwarten, beginnt er.
      if (zustand == 3) 
         {
         zustand = 4;
         zaehler = 0;
         }
// Wenn wir einen Attributwert verarbeiten, endet er.
      else if (zustand == 4) zustand = 2;
// Sonst melden wir einen Fehler.
      else ...
      break;

   default:
// Wir speichern das Zeichen, wenn wir innerhalb eines Tags sind.
      if (zustand != 0) Zeichen speichern.
      break;
    }
eingabe.close();
}
Schlagwörter: