Dateinamen pro schleifendurchlauf ändern



  • Hallo liebe Komune,

    ich steh grade nen bisl auf'm Schlauch. Was ich möchte, ist pro Schleifendurchlauf in eine neue Datei zu schreiben:

    Reduziert sieht das Problem so aus:

    for(i=1;i<5;i++)
    {
    fopen(DATEIxx, "w+");
    fprintf(DATEIxx, "%i", i);
    fclose(DATEIxx);
    }

    Dabei steht das xx für 01, 02, 03, 04

    Sprich ich will mehrere Datein erzeugen in denen ich pro Schleifen Druchlauf etwas reinschreibe. Wenn ich nun die Schleifen Anzahl erhöhe, soll sich logischerweise auch die Anzahl der erzeugte Datein ändern. Hab es schon mit Stringsversucht, aber das bekomme ich nicht hin...

    jemand ne idee?

    wäre sehr dankbar



  • Du musst für fopen() jedesmal einen String haben, der der gewünschte Dateiname ist, sonst geht's nicht. Diesen String kannst du problemlos jedesmal zusammenbauen, z.b. mit sprintf():

    char dateiname[MAX];
    int i = 7;
    
    sprintf(dateiname, "datei%2d.foo", i);
    

    Danach sollte in dateiname stehen: datei07.foo .
    🙂



  • Übrigens gibt es ein Makro FILENAME_MAX in stdio.h, das man als gesunden Wert für MAX einsetzen kann. Zumindest in C99...
    🙂



  • Oh man, ich programmier mir da nen Wolf und dann das... viel zu einfach. So weit war ich quasi schon, hab aber versuch die Anführungszeichen noch mit reinzubringen, die man normalerweise bei fprintf braucht um die Datei einzubinden.

    Danke vielmals... endlich kann ich mal ne längere Messung starten.... Perfekt.

    Grüße vom See



  • String besorgen und sprintf() druckt Dir eine Zahl in einen String. Dann kannst Du mit strncat() zwei Strings zusammenfügen. Dazu Zusammenfügen u.U. mehrmals, wenn Du den Dateinamen aus Pfad, Namensrumpf und Suffix zusammensetzt.

    Kommst Du damit alleine klar?



  • julesamsee schrieb:

    So weit war ich quasi schon, hab aber versuch die Anführungszeichen noch mit reinzubringen, die man normalerweise bei fprintf braucht um die Datei einzubinden.

    Jetzt bist du dahintergekommen, was "Strings" eigentlich sind, nämlich Zeiger auf ein Zeichen, also ein Ausdruck vom Typ char * . Diesen Typ hat im Normalfall auch der Name eines char-Arrays, weil ein Array zu einem Zeiger auf das erste Element auswertet. Diesen Typ hat auch ein literaler String (die Dinger mit den Gänsefüsschen), weil auch daraus ein Zeiger auf das erste Element (Zeichen) gemacht wird.
    🙂


Log in to reply