Datei einlesen

Tutorials.at
Verfügbare Informationen zu "Datei einlesen"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: Blümchen - DrPhil_Guth - exbs - Dirty Oerty
  • Forum: Tutorials.at
  • Forenbeschreibung: Programmierforum
  • aus dem Unterforum: C / C++
  • Antworten: 9
  • Forum gestartet am: Mittwoch 19.04.2006
  • Sprache: deutsch
  • Link zum Originaltopic: Datei einlesen
  • Letzte Antwort: vor 17 Jahren, 2 Monaten, 11 Tagen, 18 Stunden, 54 Minuten
  • Alle Beiträge und Antworten zu "Datei einlesen"

    Re: Datei einlesen

    Blümchen - 07.02.2007, 12:26

    Datei einlesen
    Hallo,
    ich habe ein Problem...denn ich möchte eine beliebig große Datei einlesen können. Am Anfang steht eine Zeichenkette, wobei er mir immer nur den ersten Buchstaben anzeigt...warum?
    Das zweite Problem ist, dass ich die Datei verlängern kann und mir werden trotzdem nur 3 Zeilen ausgegeben.
    Hab leider das Problem noch nicht gefunden.

    Code: # include <stdio.h>
    # include <math.h>
    # include <string.h>

    main () {

       int i, m, n ;
       double  lage1[m], lage2[m];
       char ziel[m];

       FILE   *datei_ptr;

       datei_ptr = fopen("test.txt","r");
       if ( datei_ptr != NULL ) {
          for ( i=0; i<m; i++ )
             fscanf(datei_ptr,"%s %lf %lf",&ziel[i],&lage1[i],&lage2[i]);

          fclose(datei_ptr);
          printf("%i Punkte wurden gelesen\n",m);
          for ( i=0; i<m; i++ )
             printf("%c\t%.3f\t%.3f gelesen\n",ziel[i], lage1[i],lage2[i]);
       }
       else {
          printf("Datei konnte nicht geoeffnet werden!\n");
       }
    }

    ich hoffe, mir kann jemand helfen.

    LG



    Re: Datei einlesen

    DrPhil_Guth - 07.02.2007, 15:54


    also ich seh 2 dinge:

    1. Du musst nicht dein Ganzes programm unter
    if ( datei_ptr != NULL ) {
    }
    unterbringen, du kannst auch einfach nur das programm beenden lassen, wenn das passiert. ungefähr so:

    Zitat: if ( (datei_ptr = fopen("test.txt","r") == NULL)
    {
    printf ("Datei konnte nicht geöffnet werden.);
    return 0;
    }

    /* Programmcode
    return 0;

    Das zweite könnte das sein:


    Code: int i, m, n ;
    ...
    for ( i=0; i<m; i++ )


    ehm, wo genau wurde m initialisiert? welchen wert sollte das haben? ;)

    Und sonst poste mal die test.txt datei, vl. gibts ja von dort was interessantes.



    Re: Datei einlesen

    exbs - 07.02.2007, 16:52


    Zitat: wobei er mir immer nur den ersten Buchstaben anzeigt...warum? -> Code: printf("%c\t%.3f\t%.3f gelesen\n",ziel[i], lage1[i],lage2[i]); net "%c" sonder "%s" ... is das erste was mir jetzt auffällt.

    hab mal schnell was geschrieben: (besonders gut kommentiert isses net Code: )#include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    #define MAX 1024

    unsigned int CharCountFile(FILE *txt)
    {
        unsigned int numChars;
       
        fseek(txt, 0, SEEK_END);
        numChars = ftell(txt);
        fseek(txt, 0, SEEK_SET);
       
        return numChars;
    }

    int main()
    {
        FILE *txt = fopen("test.txt", "r");
        if (txt == NULL) //Abbruch wenn Fehler beim öffnen der Datei
        {
                fprintf(stderr, "Error. Cannot open file.");
                return 1;
        }
       
        int x;
        char *temp = NULL;
        temp = (char*)malloc(sizeof(char) * CharCountFile(txt)); //Vorrübergehenden Speicher anlegen, für file -> string
        while(!feof(txt))
        {
                         fscanf(txt, "%c", &temp[x]);
                         x++;
        }
        temp[CharCountFile(txt)] = '\0'; //leztes Byte nullterminieren
        unsigned int i = 0, newline = CharCountFile(txt) - strlen(temp);
        free(temp); //Speicher wieder freigeben

        char tmp[MAX];
        float wert1[newline], wert2[newline];
        char target[newline][MAX];
       
        while (!feof(txt))
        {
              fgets(tmp, MAX, txt);
              sscanf(tmp, "%s %f %f", &target[i], &wert1[i], &wert2[i]);
             
              fprintf(stdout, "%s %.3f %.3f\n", target[i], wert1[i], wert2[i]);
              i++;
        }
        fclose(txt);
    } Es wird "dynamisch" genug speicher für die textdatei gestellt. es ist manchmal ziemlich umständlich aba optimieren kannst du ja selber ;).

    hier mal meine verwendete textdatei: test.txt hat folgendes geschrieben: hallo 2565.55 558.25
    buuub 655 59596 ich hoffe, so hast du das auch gemeint.



    Re: Datei einlesen

    Blümchen - 07.02.2007, 20:27


    ja also mittlerweile habe ich es so:

    Code: # include <stdio.h>
    # include <math.h>
    # include <string.h>

    main () {

       int i, m=5, n ;
       struct satz{
          double  lage1[m], lage2[m];
          char ziel[m];
       };

       struct satz s[m];


       FILE   *datei_ptr;

       datei_ptr = fopen("test.txt","r");
       if ( datei_ptr != NULL ) {
          for ( i=0; i<m; i++ )
             fscanf(datei_ptr,"%s %lf %lf",&s[i].ziel[i],&s[i].lage1[i],&s[i].lage2[i]);


          fclose(datei_ptr);
          printf("%i Punkte wurden gelesen\n",m);
          for ( i=0; i<m; i++ )
             printf("%c\t%.3f\t%.3f gelesen\n",s[i].ziel[i], s[i].lage1[i],s[i].lage2[i]);
       }
       else {
          printf("Datei konnte nicht geoeffnet werden!\n");
       }
    }


    und die Textdatei sieht so aus:

    haus 50 90
    ecke 34 21
    baum 56 76

    ähm ja, also wenn ich hier anstatt %c = %s
    Code: printf("%c\t%.3f\t%.3f gelesen\n",s[i].ziel[i], s[i].lage1[i],s[i].lage2[i]); mache,
    dann macht er nur noch Kaudawelsch!

    Ich dachte, man könnte eine beliebige Datei einlesen, also ohne das man angeben muss, wie groß dann m ist...aber vielleicht hab ich das noch nicht so ganz verstanden.

    @ exbs ... der Code sieht wirklich kompliziert aus...ich steig da leider garnicht so wirklich durch...ich glaub auch, dass ich die meisten Funktionen noch nicht hatte...kommen mir jedenfalls nicht sonderlich bekannt vor :cry:

    mmmh...was machen wir da?



    Re: Datei einlesen

    Blümchen - 07.02.2007, 20:36


    achso @DrPhil_Guth

    aber wenn ich jetzt das ganze Programm auch unter
    Code: if ( datei_ptr != NULL ) {
    }
    unterbringen, das ginge auch,oder? Also ich meine, das ist doch kein direkter Fehler oder?

    LG



    Re: Datei einlesen

    Dirty Oerty - 07.02.2007, 21:19


    es ist nur nicht so übersichtlich, wenn du es da rein quetschst.

    hab noch nicht das prob gefunden...



    Re: Datei einlesen

    exbs - 08.02.2007, 00:58


    Zitat: @ exbs ... der Code sieht wirklich kompliziert aus...ich steig da leider garnicht so wirklich durch...ich glaub auch, dass ich die meisten Funktionen noch nicht hatte...kommen mir jedenfalls nicht sonderlich bekannt vor net glei verzagen ;) ... so wie du geschrieben hast möchtest du eine beliebige menge an zeilen einlesen ... ja das is nur leider net so ohne weiteres möglich, denn du musst ja während das prog die datei analysiert die größe ermitteln um dann ohne speicher zu verschwenden gunug bereitzustellen.

    edit:

    Zitat: Ich dachte, man könnte eine beliebige Datei einlesen, also ohne das man angeben muss, wie groß dann m ist...aber vielleicht hab ich das noch nicht so ganz verstanden. ja kla du kannst jede textdatei einlesen, NUR muss sie 1. deinem format gerecht werden und 2. muss genug speicher vorhanden sein.

    einfach ein "m" zu nehmen ohne vorher einen wert bestimmt zu habn ist net das ware. du musst einer variable vor der benutzung einen wert geben oder während der benutzung ... aba nie geht net.

    ich gug mir jetzt dein neues bsp mal genauer an ;) ..



    Re: Datei einlesen

    DrPhil_Guth - 08.02.2007, 16:40


    Blümchen hat folgendes geschrieben:

    aber wenn ich jetzt das ganze Programm auch unter
    Code: if ( datei_ptr != NULL ) {
    }
    unterbringen, das ginge auch,oder? Also ich meine, das ist doch kein direkter Fehler oder?

    LG

    Nö, Fehler isses keiner. Nur anders gehts auch, und da hast du ne klammer weniger...



    Re: Datei einlesen

    Blümchen - 12.02.2007, 11:38


    Danke für euere Hilfe...hat mir schon geholfen :wink:



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Tutorials.at

    Variablen tauschen - gepostet von Joe am Samstag 03.11.2007
    Windowsoberfläche bei C++ Programmierung - gepostet von kismoh am Dienstag 13.02.2007
    MP3 TAGS ? - gepostet von exbs am Donnerstag 04.01.2007
    Blitz3D-Welten - gepostet von Dragorad am Dienstag 14.11.2006
    c-Programme mit psp - gepostet von Elch am Donnerstag 13.09.2007
    GUI mit BASIC - gepostet von BASIC am Mittwoch 09.08.2006
    Befehl zum löschen einer Datei - gepostet von Bratwurst am Dienstag 14.08.2007



    Ähnliche Beiträge wie "Datei einlesen"

    Frida The Lion Queen. - PFQ (Mittwoch 20.10.2010)
    Datei respektiv link Upload - nico (Sonntag 06.03.2005)
    Was ist diese Datei "optimize" ??? - FlorianSchröder (Donnerstag 29.04.2004)
    Neuer Virus kommt durch BMP-Datei - RaymannStyleZ (Donnerstag 13.05.2004)
    AVI-Datei umwandeln in V-CD bzw. S-VCD - Dutch (Dienstag 01.02.2005)
    Save-Datei - zwerg20-07 (Sonntag 05.08.2007)
    GOTHIQUINE (NARREN7) - Tory (Dienstag 25.01.2011)
    ISO Datei erstellen - Joggl (Montag 23.07.2007)
    Befehl zum löschen einer Datei - Bratwurst (Dienstag 14.08.2007)
    Datei-Upload - cr1sch4 (Freitag 09.12.2005)