Einfügen eines ansteigenden Index in Array



  • hallo ich habe folgendes vor: Schreiben mehrerer Dateien auf SD-Karte.
    Der Dateiname soll so gebildet werden:

    filename[0]='d';
    	filename[1]='a';
    	filename[2]='t';
    	filename[4]='.';
    	filename[5]='d';
    	filename[6]='a';
    	filename[7]='t';
    	filename[8]=0;
    
    for(int Index=0;Index<50;Index++){
       filename[3]=Index;
    .
    .
    .}
    

    Doch leider will das nicht so, wie ich will.
    Besonders knifflig wird das ja bestimmt auch, sobald 'Index' zweistellig wird.

    Könnt ihr mir da aushelfen?
    Danke sehr



  • Hi,
    wozu soll das mit der Schleife gut sein? Gib doch den Dateinamen ein, wie üblich mit fgets z.B.
    Oder lies die Namen aus einer Datei ein, oder kodier sie ins Programm ein, etc.



  • wozu soll das mit der Schleife gut sein?

    Na ganz einfach: ich möchte dass er mir hintereinander dat0, dat1, dat2 usw. erzeugt.
    Was soll ich denn da erst nen Umweg über das einlesen der Dateinamen machen???
    Die Schleife soll doch bloß den Index in den Dateinamen einfügen.

    Ich sollte noch erwähnen: Die Software läuft auf einem Mikrocontroller, deswegen wird das mit fgets auch nichts.

    Was meinst du mit

    oder kodier sie ins Programm ein

    ?



  • char filename[]="datXX.dat";
    for(int Index=0;Index<50;Index++){
       filename[3]=Index/10;
       filename[4]=Index%10;
    ...
    }
    


  • PlattitüdenAbonennt schrieb:

    wozu soll das mit der Schleife gut sein?

    Na ganz einfach: ich möchte dass er mir hintereinander dat0, dat1, dat2 usw. erzeugt

    Hab ich irgendwie verpeilt 😃 . Najanu, kannst du volkards Ansatz ausbauen und lauffähig machen oder sprintf nehmen. Oder rafft es das Dingen auch nicht?



  • volkard schrieb:

    char filename[]="datXX.dat";
    for(int Index=0;Index<50;Index++){
       filename[3]=Index/10;
       filename[4]=Index%10;
    ...
    }
    

    Die Rechungen sollten:

    filename[3]=Index/10 + 48;
       filename[4]=Index%10 + 48;
    

    Du möchtest doch die 0 als Ascii in den String schreiben. '0' hat den Wert 48 und nicht 0. 🙂

    Hoffe das war richtig so.



  • Die Funktion die die Dateien erzeugt, erhält ja das char-Array mit dem Dateinamen übergeben.
    Da müsste ich doch den Dateinamen zusammenbauen können mittels strncat()usw. oder?

    char filename[100];
    char filetype[]=".txt";
    char prefix[]="dat";
    
    strcpy(filename,prefix);
    
    for("Indexschleife")
    strcat(filename,Index);
    
    strcat(filename, filetype);
    

    Oder seht ihr da Probleme?



  • Mit sprintf kannst du nicht warm werden?

    for ( index = start; index <= stop; index++ )
    		sprintf ( filename, "%s%d%s", prefix, index, filetype );
    


  • Doch, nur hab ich diesen Befehl in meiner kurzen C-Karriere bisher noch nie benutzt.
    Wird sich ab sofort ändern 😉



  • Ja, ist ganz praktisch das Ding. Man muss bloß aufpassen, das man das Array nicht sprengt. Dies dagegen ist die sichere Version:
    http://www.cppreference.com/wiki/c/io/snprintf

    Gruß,
    B.B.


Anmelden zum Antworten