Daten in eine Datei schreiben.



  • Hallo ich möchte mir eine Art Kartei System Programmiren und dazu Daten in eine Datei schreiben die wen sie noch nicht vorhanden ist neu erstellt wird.

    Wie macht man das ?

    Ich habe c in der Schule gehabt und arbeite mich aus spaß und guter laune wieder ein.

    Danke



  • ok ich denke ich hab was gefunden.

    http://www.cplusplus.com/reference/cstdio/fopen/

    THX



  • Hi ich hab mal was versucht, und zwar möchte ich ein Array in eine Datei speichern und wider laden und das ganze in einer Datei zum aus probieren oder üben und lernen.

    Nur klappt das nicht ganz so, woran klappt das und wie müsste ich das dann anstellen und wie kann man bei ähnlichen Problemen vorgehen?

    //---------------------------------------------------------------------------
    
    #pragma hdrstop
    #include <stdio.h>
    #include <conio.h>
    #define widerstand 2
    //---------------------------------------------------------------------------
    
    #pragma argsused
    int main(int argc, char* argv[])
             {
    
    int tabelle[11][2], x ,y;
    
    for (x = 1; x <= 10; x++)
    
                 {
    
          printf("Bitte geben sie den %i. Strom ein.\n",x) ;
    
          scanf("%i", &tabelle[x][0]) ;
             }
    
    for (y = 1; y <= 10; y++)
            {
    
    tabelle[y][1]= tabelle[y][0] * tabelle[y][0] * 2 ;
    
    printf("Aus Strom %i: \t %iW\n", tabelle[y][0], tabelle[y][1] );
    
                        }
    
    int status = 0;
    const char * const filename = "bsp.bin";
    FILE * fp;
    
    if((fp = fopen (filename, "wb" )) == NULL)
    {
    fprintf (stderr, "Fehler beim Oeffnenn der Datei %s\n" , filename);
    return 1;
    }
    
    status = fwrite (tabelle, sizeof(tabelle), 1, fp);
    
    if(status < 1)
    {
     fprintf (stderr, "Fehler beim binaeren Schreiben auf Datei %s\n" , filename);
     return 2;
    
    }
    
    else
    {
     printf ("\n %d Array-Objekt wurde geschrieben\n", status);
    
    }
    
    int puffer[11];
    int index;
    
    const char * const filename = "bsp.bin";
    FILE * fp;
    if((fp = fopen (filename = "rb" )) == NULL)
    
    {
      fprintf (stderr, "Fehler beim Oeffnenn der Datei %s\n" , filename);
    return 1;
    
    }
    
    if(fread (puffer, sizeof puffer, 1, fp) < 1)
    {
      fprintf (stderr, "Fehler beim binaeren Schreiben auf Datei %s\n" , filename);
     return 2;
    }
    
         printf( "Inhaltde Datei %s: \n", filename);
    
    for( index = 0; index < sizeof(puffer)/sizeof(puffer[0]); index++)
    
         printf("%i\n", puffer[index]);
    
                   getch();
    
            return 0;
    }
    //---------------------------------------------------------------------------
    
    [C++ Fehler] Test.cpp(67): E2238 Bezeichner 'filename' mehrfach deklariert
    [C++ Fehler] Test.cpp(37): E2344 'filename' bereits deklariert
    [C++ Fehler] Test.cpp(68): E2238 Bezeichner 'fp' mehrfach deklariert
    [C++ Fehler] Test.cpp(38): E2344 'fp' bereits deklariert
    [C++ Fehler] Test.cpp(69): E2024 const-Objekt kann nicht modifiziert werden.
    

  • Mod

    Das sind doch jeweils ganz eindeutige Fehlermeldungen, was ist daran nicht zu verstehen? Mach eigene Güligkeitsbereiche für die Variablen. Oder zur Not benenn sie um.
    Zeile 69 ist ein Schreibfehler, guck sie dir noch einmal an.

    Ist das von dir selbst programmiert? Für jemanden der vor 4 Tagen nicht wusste, was fopen ist, ist das recht … beeindruckend. Umso komischer, dass du diese einfachen Fehlermeldungen nicht verstehst. Verdacht: Hast du das bloß abgeschrieben? Falls ja: Lass das Abschreiben lieber. Nicht ohne es wirklich gründlich(!) zu verstehen. Sonst lernst du gar nichts. Unter anderem lernst du nicht, wie man einfache Fehler behebt.



  • Deine Schleifen in den Zeilen 17 ff und 26 ff arbeiten mit den falschen Indizes.

    In C fängt ein Array immer bei 0 an.

    Aber sowas wird in jedem (auch noch so schlechten) C-Buch erklärt. Demnach hast du keins.
    Das solltest du ändern.



  • //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Test.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    //---------------------------------------------------------------------------
    
    #include <stdio.h>
    #include <conio.h>
    #define widerstand 2
    //---------------------------------------------------------------------------
    
    #pragma argsused
    
     const char * const filename = "bsp.bin";
     FILE * fp;
    
    int main(int argc, char* argv[])
             {
    
    int tabelle[11][2], x ,y;
    
    for (x = 1; x <= 10; x++)
    
                 {
    
          printf("Bitte geben sie den %i. Strom ein.\n",x) ;
    
          scanf("%i", &tabelle[x][0]) ;
             }
    
    for (y = 1; y <= 10; y++)
    {
    
    tabelle[y][1]= tabelle[y][0] * tabelle[y][0] * 2 ;
    
    printf("Aus Strom %i: \t %iW\n", tabelle[y][0], tabelle[y][1] );
    }
    
    int status = 0;
    
    //const char * const filename = "bsp.bin";
    //FILE * fp;
    
    if((fp = fopen (filename, "wb" )) == NULL)
    {
    fprintf (stderr, "Fehler beim Oeffnenn der Datei %s\n" , filename);
    return 1;
    }
    
    status = fwrite (tabelle, sizeof(tabelle), 1, fp);
    
    if(status < 1)
    {
     fprintf (stderr, "Fehler beim binaeren Schreiben auf Datei %s\n" , filename);
     return 2;
    
    }
    
    else
    {
     printf ("\n %d Array-Objekt wurde geschrieben\n", status);
    
    }
    
    int puffer[11];
    int index;
    
    getch();
    //const char * const filename = "bsp.bin";
    //FILE * fp;
    
    if((fp = fopen (filename, "rb" )) == NULL)
    {
      fprintf (stderr, "Fehler beim Oeffnenn der Datei %s\n" , filename);
    return 1;
    
    }
    
    if(fread (puffer, sizeof puffer, 1, fp) < 1)
    {
      fprintf (stderr, "Fehler beim binaeren Schreiben auf Datei %s\n" , filename);
     return 2;
    }
    
         printf( "Inhalt der Datei %s: \n", filename);
    
    getch();
    
    for( index = 0; index < sizeof(puffer) / sizeof(puffer[0]); index++)
    
         printf("%i\n", puffer[index]);
    
     getch();
    
        return 0;
    
    }
    //---------------------------------------------------------------------------
    

    Es wird eine Datei erzeugt und da auch hinein geschrieben, nun geht das Lesen nicht irgendwas stimmt da noch nicht ich find den Fehler nicht?



  • Irgendwie vermisse ich da fclose. Mehr als eins.

    Mein letzter Post hat immer noch Gültigkeit.



  • Meinst du so

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Test.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    //---------------------------------------------------------------------------
    
    #include <stdio.h>
    #include <conio.h>
    #define widerstand 2
    //---------------------------------------------------------------------------
    
    #pragma argsused
    
     const char * const filename = "bsp.bin";
     FILE * fp;
    
    int main(int argc, char* argv[])
             {
    
    int tabelle[10][2], x ,y;
    
    for (x = 1; x <= 10; x++)
    
                 {
    
          printf("Bitte geben sie den %i. Strom ein.\n",x) ;
    
          scanf("%i", &tabelle[x][0]) ;
             }
    
    for (y = 1; y <= 10; y++)
    {
    
    tabelle[y][1]= tabelle[y][0] * tabelle[y][0] * 2 ;
    
    printf("Aus Strom %i: \t %iW\n", tabelle[y][0], tabelle[y][1] );
    }
    
    int status = 0;
    
    //const char * const filename = "bsp.bin";
    //FILE * fp;
    
    if((fp = fopen (filename, "wb" )) == NULL)
    {
    fprintf (stderr, "Fehler beim Oeffnenn der Datei %s\n" , filename);
    return 1;
    }
    
    status = fwrite (tabelle, sizeof(tabelle), 1, fp);
    
    if(status < 1)
    {
     fprintf (stderr, "Fehler beim binaeren Schreiben auf Datei %s\n" , filename);
     return 2;
    
    }
    
    else
    {
      fclose(fp);
    
     printf ("\n %d Array-Objekt wurde geschrieben\n", status);
    
    }
    
    int puffer[10];
    int index;
    
    getch();
    //const char * const filename = "bsp.bin";
    //FILE * fp;
    
    if((fp = fopen (filename, "rb" )) == NULL)
    {
      fprintf (stderr, "Fehler beim Oeffnenn der Datei %s\n" , filename);
    return 1;
    
    }
    
    if(fread (puffer, sizeof puffer, 1, fp) < 1)
    {
      fprintf (stderr, "Fehler beim binaeren Schreiben auf Datei %s\n" , filename);
     return 2;
    }
    
    fclose(fp);
    
         printf( "Inhalt der Datei %s: \n\n", filename);
    
    getch();
    
    for( index = 0; index < sizeof(puffer) / sizeof(puffer[0]); index++)
    
         printf("%i\n", puffer[index]);
    
     getch();
    
        return 0;
    
    }
    //---------------------------------------------------------------------------
    

    Jetzt kann ich zwar Lesen aber da kommt was anderes raus.

    Bitte geben sie den 1. Strom ein.
    1
    Bitte geben sie den 2. Strom ein.
    2
    Bitte geben sie den 3. Strom ein.
    3
    Bitte geben sie den 4. Strom ein.
    4
    Bitte geben sie den 5. Strom ein.
    5
    Bitte geben sie den 6. Strom ein.
    6
    Bitte geben sie den 7. Strom ein.
    7
    Bitte geben sie den 8. Strom ein.
    8
    Bitte geben sie den 9. Strom ein.
    9
    Bitte geben sie den 10. Strom ein.
    10
    Aus Strom 1:     2W
    Aus Strom 2:     8W
    Aus Strom 3:     18W
    Aus Strom 4:     32W
    Aus Strom 5:     50W
    Aus Strom 6:     72W
    Aus Strom 7:     98W
    Aus Strom 8:     128W
    Aus Strom 9:     162W
    Aus Strom 10:    200W
    
     1 Array-Objekt wurde geschrieben
    Inhalt der Datei bsp.bin:
    
    1638180
    1638192
    1
    2
    2
    8
    3
    18
    4
    32
    


  • Erstens:
    Und nochmal.

    DirkB schrieb:

    Deine Schleifen in den Zeilen 17 ff und 26 ff arbeiten mit den falschen Indizes.

    In C fängt ein Array immer bei 0 an.

    Aber sowas wird in jedem (auch noch so schlechten) C-Buch erklärt. Demnach hast du keins.
    Das solltest du ändern.

    Zweitens:
    Schreibst du das ganze Array tabelle. Das sind 10 * 2 Werte (20). Du liest aber nur 10 Werte ein. Wo sind die anderen 10?

    Im Speicher liegen die Werte von Array hintereinander, wobei der letzte Index am schnellsten wechselt:
    [0][0],[0][1],[1][0],[1][1],[2][0],[2][1] .... [9][0],[9][1]
    Davon liest du jetzt die ersten zehn Werte wieder ein:
    [0][0],[0][1],[1][0],[1][1] .... [4][0],[4][1]

    Beim einlesen fängst du aber erst beim Index [1][0] an.
    Jetzt klar, wo deine Werte herkommen?



  • DirkB schrieb:

    Beim einlesen fängst du aber erst beim Index [1][0] an.

    Das ist missverständlich ausgedrückt.
    Beim abfragen (einlesen) der Werte vom Nutzer fängst du beim Index [1][0] an.
    Und gehst dann bis [10][0], der aber garnicht existiert.


Anmelden zum Antworten