Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

BK Simon

Treue Seele

  • »BK Simon« ist der Autor dieses Themas

Beiträge: 151

Beruf: Student

  • Private Nachricht senden

1

24.03.2013, 21:29

Parser für CGI-Anwendung

Wunderschönen guten Abend :)

Ich bin gerade dabei eine kleine Anwendung für ein "Web_Adressbuch" zu schreiben. Das ganze ist ein reines Lernprojekt und hat keinen speziellen Nutzen.

Als Programmiersprache verwende ich C++ und für die Homepage ganz normal HTML mit ein wenig CSS.

Da die Eingaben die in ein Formular gemacht werden, ja komplett in einem String an das C++ Programm übergeben werden, muss man nacher alles wieder auseinanderpflücken, wofür ich mir einen Parser geschrieben habe.

Meine Bitte wäre nun, dass jemand mal über den Code schauen könnte und mir Verbesserungsvorschläge oder Sonstiges geben könnte :)

Bin über jede Hilfe dankbar :)

Gruß
Simon


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <iostream>

using namespace std;

// Parser
//
char *Parser ( char Feldname[15] )
{
    // Variablen
    //
    char *Buffer;
    char *temp_string;
    int i;
    char *pch = NULL;
    int size_wert = 0;
    char *chUebergabe_laenge;
    int Uebergabe_laenge;
    char *Error = new char[2];
    Error[0] = 'E';
    Error[1] = '\0';

    // Laenge vom Übergabestring ermitteln
    chUebergabe_laenge = getenv("CONTENT_LENGTH");
    Uebergabe_laenge = atoi ( chUebergabe_laenge );

    Buffer = new char[100];

    cout << "Content-Type: text/html\r\n\r\n";

    cin >> Buffer;

    // Ausgabe des Strings der geparst werden soll
    // cout << Buffer << endl << endl;


    // Suchen der Adresse vom Feldnamen der geparst werden soll
    pch = strstr (Buffer, Feldname);
    if ( pch != NULL )
    {

        // Die Adresse so verändern, dass der Zeiger auf den ersten Wert zeigt.
        do
        {
            pch++;

        }   while ( *pch != '=' );
        // Korrigieren des Wertes
        pch++;

        // Durchlaufen des Wertes zur Ermittlung der Größe
        for ( i = 0; *pch != '&' && *pch != '\0'; i++ )
        {
            size_wert++;
            pch++;

        }
        // Reservierung von soviel Speicher, wie der Wert lang ist + 1, wegen der Nullterminierung
        temp_string = new char[size_wert + 1];

        // Zurücksetzen vom Zeiger pch
        pch -= size_wert;

        // Speichern des Wertes in temp_string
        for ( i = 0; *pch != '&' && *pch != '\0'; i++ )
        {
            temp_string[i] = *pch;
            pch++;

        }
        // Abschließen des Strings mit der Nullterminierung
        temp_string[i] = '\0';

        return temp_string;
    }

    return Error;
}

2

24.03.2013, 22:23

Naja, du schreibst ja eine Menge von Hand, was es längst in besser und schöner gibt. Guck dir mal folgendes an, damit solltest du das gesamte Programm durch etwa 5 Zeilen ersetzen können:

http://en.cppreference.com/w/cpp/string/basic_string (statt char*)
http://en.cppreference.com/w/cpp/string/basic_string/find (statt der Schleifen, die nach einem bestimmten Zeichen suchen)
http://en.cppreference.com/w/cpp/string/…ng/basic_string (Variante 2, um einen neuen String aus teilen eines alten zu erstellen)
Lieber dumm fragen, als dumm bleiben!

BK Simon

Treue Seele

  • »BK Simon« ist der Autor dieses Themas

Beiträge: 151

Beruf: Student

  • Private Nachricht senden

3

25.03.2013, 00:45

Erstmal ein Danke für die schnelle Antwort :)

Zu deinem ersten Satz:
Mir war bewusst, dass man auf Funktionen etc. zurückgreifen kann, die einem Parser den ich benötige, entsprechen.
Dieses kleine Projekt ist aber ein Schulprojekt, bei dem wir keine fertigen Sachen benutzen sollen, damit wir auch hinter die Materie steigen und uns die Sachen genauer anschauen.

Zu deinen Links:
Habe gerade mal über alle 3 Links einen Blick drüber geworfen und im ersten Moment wirkt die Syntax bzw. die Erklärung nicht gleich verständlich :)
Mag vllt. auch ein wenig am Englisch liegen, doch werde ich Morgen nochmal richtig drüber schauen, um es zu verstehen.

Werbeanzeige