ID darf nicht doppelt vorkommen !



  • So irgendwie habe ich Logikfehler in meiner for-Schleife !
    Code :

    int file_id=0,id=0;
        for (int j = 1 ; j < 50 ; j++)
        {
            for (i = 0 ; i < anzahl; i++)
            {
                fscanf(stream,"%d || %s || %s || %d",&file_id,unwichtig1,unwichtig2,&unwichtig3);
    
                    //printf("\n\n File_id : %d J : %d \n\n",file_id,j);
                    //system("pause");
    
                    if (file_id == j)
                    {
                        gefunden = 1;
                    }
            }
            if (gefunden != 1)
            {
            id = j;
            break;
            }           
    
        }
    

    Jede ID darf in der Textdatei nur einmal vorkommen . So jetzt suche ich mit meiner Schleifenkonstruktion eine int - Zahl die in der Datei noch nicht vorkamm. Doch leider geht es nicht . Kann mir einer helfen . Die Variable id soll also eine id zum Schluss beinhalten die noch nciht vorkam .



  • Hmmm .... alle Zeilen der Datei durchlesen, größten ID-Wert merken und am (Datei)ende gilt dann neuerWert = größteID+1;



  • Aso hm ja stimmt wollte es eigentlich so machen das wenn die textdatei so aussieht
    id
    ----
    1
    6
    7
    8

    er als id die 2 nimmt weil diese ja ncoh frei ist aber so gehts auch !!
    DANKE



  • Das geht auch. Ist aber ein bisschen tricky. Du erstellst Dir im Speicher eine ausreichend große 'Bitmap'. Dann liest Du Deine Datei sequentiell durch, für jede ID setzt Du dann in der Bitmap das entsprechende Bit. Am Dateiende suchst Du dann in der Bitmap die erste '0' und damit hast Du dann auch gleich die nächste freie ID.



  • kannst du mir verraten wieso diese Schleife immer nur die ID der ersten Zeile ausgibt ?

    for (i = 0 ; i < 4 ; i++)
            {
                fscanf(stream,"%d || %s || %s || %d",&file_id,unwichtig1,unwichtig2,&unwichtig3);
    printf("%d",file_id);           
    
            }
    

    so langsam zweifel ich an meiner Intelligenz !!!



  • Hat sich schon erledigt war meine eigene Blödheit !


Anmelden zum Antworten