Datei mit variabler Spaltenzahl auslesen



  • Hallo euch Allen,

    Ich habe da schon wieder ein Problem mit dem ich nicht weiter komme.
    Ich lese eine txt-Datei mit folgendem Code zeilenweise aus (Auszug):

    while(fscanf(datei,"%f %f %f", &wert.spalte1, &wert.spalte2, &wert.spalte3)!=EOF)
    {
    ...
    }
    

    Damit kann ich eine Datei auslesen die 3 Spalten hat. Ich habe jedoch zwei verschiedene Dateitypen. Die eine Datei hat halt 3 Spalten, die andere 5. Ich möchte aber beide Dateien mit dem gleichen Programm auslesen können, indem ich vorher nach der Anzahl der Spalten frage.
    Nur weis ich leider nicht wie ich das realisieren kann. Meine Idee war, je nach gewählter Spaltenanzahl den Ausdruck "%f %f %f" oder "%f %f %f %f %f" in die while Schleife zu übergeben. Geht das überhaupt??? Wenn ja, muss ich den Ausdruck "%f %f %f" erst in einen Char umwandeln?
    Das habe ich versucht, leider ohne Erfolg.
    Habt ihr vielleicht ne Idee???
    Danke!!!
    Gruß
    Maddin



  • Hi,
    mach doch zwei while Schleifen mit nem if/else drum herum.

    Gruß,
    B.B.



  • Moin,
    Ja, hatte ich auch überlegt, allerdings bläht das mein Programm stark auf, da ich doch diverse Berechnung und Extremwertbestimmungen in der Schleife habe, sodass ich auf ca. 150 Zeilen in der Schleife komme 😞
    Ich dachte halt das es da ne elegantere Lösung gibt... 😉
    Aber trotzdem danke!

    Gruß
    Maddin



  • MS@GL schrieb:

    sodass ich auf ca. 150 Zeilen in der Schleife komme 😞

    In eine Funktion auslagern, dann hast du nur noch eine Zeile drin.

    Vllt. geht auch sowas:

    char* fmt;
    
    if ( lese3 )
        fmt = "%f %f %f";
    else 
        fmt = "%f %f %f %f %f";
    
    while(fscanf(datei,fmt, &a, &b, &c, &d, &e !=EOF)
    

    Im Falle lese3 wäre d und e arbeitslos. Habe z.Zt. weder nen Compiler noch den Standard zur Hand um testen zu können, ob das überhaupt kompiliert oder ob Probleme zu erwarte sind.
    Vllt. hat ja jemand Lust das mal rauszufinden, ansonsten gucke ich heute Abend nochmal nach.



  • Jo, funzt super, Vielen Dank!!! Genauso habe ich mir das gedacht!!!
    DANKE!!!


Log in to reply