Dateien bearbeiten



  • Hallo Leute,
    Ich habe folgende Problem:
    Ich habe mehrere Datein die ich einlesen muss, das hab ich schon geschafft, und die bestehen aus einer unbestimmten ANzahl von Zahlen pro zeile. Jede Zeile hat die gleiche Anzahl von Zahlen, welche durch ein komma getrennt sind.
    Also ungefähr so (vereinfachtes Beispiel:

    1, 2, 3
    4, 5, 6
    

    ich muss nun die schauen wieviele Zahlen pro zeile vorhanden sind und testen ob auch jede datei so aus schaut.
    ICh habmir getdacht ich versuch es mit fgets aber da muss ich ja abgeben wieviele zahlen vorhanden sind.
    Kann mir bitte jemand helfen.
    Danke sehr



  • fgets() verlangt als Parameter die maximale Anzahl an Zeichen, die in dem übergebenen Puffer gespeichert werden können.

    Beispiel:

    char zeile[256];
    
    ...
    fgets(zeile, 256, datei);
    ...
    

    Am besten legst du ein char-Array an, das groß genug ist, jede Zeile aufzunehmen, die in deinen Dateien vorkommen. Wenn die Zeilen allerdings zu groß sind, dann müsstest du eine Zeile mit fgets() solange einlesen, bis du ein \n bekommst:

    ...
    unsigned int anzahl = 0;
    unsigned int zeilenzahl = 1;
    
    while(fgets(zeile, 256, datei))
    {
       anzahl += zaehle_zahlen(zeile);
       if(strchr(zeile, '\n'))
       {
          printf("Anzahl Zahlen in Zeile %u: %u", zeilenzahl++, anzahl);
          anzahl = 0;
       }
    }
    printf("Anzahl Zahlen in Zeile %u: %u", zeilenzahl, anzahl);
    ...
    


  • also ich wuerde das so machen:

    zuertst mit dieser methode die zeile auslesen(tmp udn puffer muessen char arrays mit hier zb 255 zeichen sein)

    char* getsLine(int n, /*zeile die ausgelesen werden Soll*/
                   FILE *file) {/*der stream aus dem gelesen werden soll*/
       int i;
       for(i = 0; i < n-1; i++)
          if(fgets(tmp, 255, file) == NULL)
             return NULL;
       if(fgets(puffer, 255,file) == NULL)
          return NULL;
       return puffer;
    }/*end getsLine*/
    

    aufruf dieser methode:

    char *currLine;
    currLine = getsline(zeilenNummer, fileStream);
    if(currLine == NULL)
        /*fehlgeschlagen!*/
    

    tja und dann kannste auf currLine wie auf einen ganz normalen array zugreifen und diesen manipulieren



  • @linuxuser
    Ich hoffe du willst deine Funktion nicht in einer Schleife verwenden, um mehrere Zeilen auszulesen.

    Problem bei deiner Funktion ist auch noch, dass sie nicht auf längere Zeilen als 254 Zeichen reagieren kann.

    Aja, wo und wie sind denn tmp und puffer definiert? Sieht ziemlich global aus 😮



  • @AJ
    stimmt den sonnst mueesste man mit fseek den dateikonstruktor wieder auf anfang setzen!

    bei jedem aufruf von getsLine



  • dateikonstruktor???



  • --linuxuser-- schrieb:

    @AJ
    stimmt den sonnst mueesste man mit fseek den dateikonstruktor wieder auf anfang setzen!

    bei jedem aufruf von getsLine

    Das kommt noch dazu...

    Ich geb dir nur ein Stichwort: Performance!

    [OffTopic]
    Das ist für einen Hacker auch ganz wichtig 😉 😃
    [/OffTopic]


Anmelden zum Antworten