kleine Parser-Probleme



  • Hallöchen !!

    Ich will nen kleinen Parser schreiben und hab mit "strtok" auch ne recht einfache Methode gefunden nen Text zu zerpflücken.

    Das Format der einzulesenden Wörter sieht so aus:

    G_STRING1_STRING2 ..blabla
    L_STRING1_STRING2 ..blabla

    Das Programm ist ersmal nur provisorisch. Erst wir geschaut ob bis zum ersten "" ein G oder L steht und dann soll das Wort bis zum nächsten "" gelesen und mit switch ausgewertet werden.

    #include <iostream>
    #include <fstream>
    #include <string>
    
    using namespace std;
    
    int main ()
    {
        char cDataBuffer[128];
        char *token;
        ifstream InStream ("bla.txt");
    
        // solange, bis Datei am Ende
        while (!InStream.eof())
        {
    	// Zeilenweise einlesen
    	InStream.getline(cDataBuffer,sizeof(cDataBuffer));
    
    	// Alles was vor " " steht in token speichern
    	token = strtok(cDataBuffer,"_");
    
    	// Wenn G dann ...
    	if(token = "G")
    	{
    	token = strtok(0,"_");
    
    	// Welches Wort kommt als nächstes
    	switch(token)
    	{
    	case "AREA":
    	cout << endl << token;
    	case "BLACKLEVEL":
    	cout << endl << token;
    	};
    
    	if(token = "L")
    	{
    	token = strtok(0,"_");
    
    	switch(token)
    	{
    	case "AREA":
    	cout << endl << token;
    	case "BLACKLEVEL":
    	cout << endl << token;
    	};
    
        };
    
        return 0;
    };
    

    Ich bekomme folgende Fehlermeldung:

    main.cpp:27: error: switch quantity not an integer
    main.cpp:41: error: switch quantity not an integer
    main.cpp:89: error: syntax error at end of input
    

    Ich glaube es hat etwas mit den Variablentypen zu tun, weiß aber nicht wie es besser gehen muß.

    Grüße,

    Lutz



  • Switch geht nicht mit strings.

    Nur mit Zahlen bzw. einzelnen Zeichen (also 'a' )

    if , else if , else ggf. wäre auch der Einsatz von map zu prüfen.



  • Och, Schade 😞

    Dann werd ich mich mal mit if und else quälen. Ist nur leider nicht so schön übersichtlich wie switch.

    Danke !!!!!


Anmelden zum Antworten