Einzelne Datensätze löschen



  • Hi Leute,

    hab mal ein Problem bezüglich dem Löschen: Ich habe eine Struktur geschrieben und ihre Instanz besteh aus einem array (string), welches 20 Datensätze lesen kann...............Wenn ich jetzt alle 20 beschrieben hab, aber den 10, 11 und 20 löschen will, hab ich ein Problem: Ich weiß nicht wie! Kann mir da jemand helfen? Danke im Voraus

    P.S.: Programm beinhaltet keine dynamische Speicherreservierung!



  • lösch' sie nicht wirklich sondern markier' sie als gelöscht



  • Eine etwas klarere Erleuterung des Problems wäre hilfreich.



  • Wie markier ich sie denn als gelöscht? Hier nochmal mein Problem: Sagen wir mal, ich hab 20 Datensätze und will 4 beliebige davon löschen..........Wie mach ich das?



  • Auf die Gefahr hin, dass ich dich falsch verstanden habe:

    Du hast ein Array von Strukturen? Du willst aus diesem Array einzelne Strukturen entfernen?

    Da kannst du dann z.B. mit memmove() die Strukturen hinter dem zu löschenden um eins nach vorne verschieben, und dann den restlichen Platz mit memset() plätten. Ist es das was du willst?



  • Vitamin C schrieb:

    Wie markier ich sie denn als gelöscht? Hier nochmal mein Problem: Sagen wir mal, ich hab 20 Datensätze und will 4 beliebige davon löschen..........Wie mach ich das?

    wenn deine datensätze char-arrays sind, dann setzt du einfach für einen leeren datensatz das erste element des arrays auf '\0'. beim einfügen machste z.b. 'if (structname.arrayname{0] == '\0')' um einen leeren datensatz zu finden.

    TactX schrieb:

    Da kannst du dann z.B. mit memmove() die Strukturen hinter dem zu löschenden um eins nach vorne verschieben, und dann den restlichen Platz mit memset() plätten.

    na klar. immer schön den prozessor quälen, der hat ja sonst nix zu tun 😉



  • net schrieb:

    na klar. immer schön den prozessor quälen, der hat ja sonst nix zu tun 😉

    Ach, das Bißchen rumkopieren stört doch die CPU nicht... 😉



  • Ich geb euch mal meine Struktur:

    // Datensätze zum Beninverbrauch
    #if !defined(Struktur_h) // Wenn <Dateiname.h> noch nicht vorhanden,
    #define Struktur_h      // erstelle <Dateiname.h>
    #include <stdio.h>
    #include <conio.h>
    
    struct daten
    {
    	char kraftstoff[30];
    	char standort[30];
       char ziel[30];
       char dienstfahrt[10];
       char name[30];
       char kennzeichen[10];
       char datum[10];
       float entfernung;
       float verbrauch;
    }sDaten;
    
    daten *pDaten = &sDaten;
    daten Arr[20];
    #endif // Ende Definition
    

    Also ich benutz Arr und lass auch auf Arr zeigen



  • Vitamin C schrieb:

    Ich geb euch mal meine Struktur:

    jo, dann könntestes sinngemäss etwa so machen

    // löschen
    void mark_entry_as_deleted (int i)
    {
        Arr[i].name[0] = 0;
    }
    
    // freien eintrag finden
    int get_free_entry (void)
    {
        int s;
        for (s=0; s<20; s++)
            if (Arr[s].name[0] == 0)
                return s;
        // alle belegt
        return -1; 
    }
    

Anmelden zum Antworten