Datei schreiben?



  • Ok danke, das hab ich jetzt hinbekommen, ich hab zwar im internet gefunden wie man die Datei schreibt (sieh oben) aber irgendwie find ich nichts vernünftiges zum lesen des Inhaltes der Datei.
    Kann (wenn ich den inhalt der Datei auch ausgeben kann ^^) man den Inahlt der Datei nachher eigentlich nach her auch vergleichen (in einer if anweisung z.b.?)?

    EDIT: Sry, habs rausgefunden:

    ifstream Name("AccName.txt");
    	Name>>newaccname;
    	cout<<newaccname;
    

    mfg Frusciante²



  • Natürlich! Du meinst jetzt sicherlich bezogen auf dein Beispiel, oder? So wie ich das sehe, zeihst du die Daten von der Datei in die Variable "newaccname" rein, welche du ja auch für die Bildschirmausgabe benutzt. Das kommt jetzt natürlich auf den Typ dieser Variablen an, ist es "std::string"? Dann funktioniert ein ganz einfacher Vergleich mit dem Gleichheitsoperator (==).



  • Ich öffne die Datei lotto1.txt und schreibe dort 700000 Zeilen rein. Dann werden die nächsten dateien geöffnet (lotto2.txt bis lotto20.txt) aber nichts reingeschrieben. Kommt es daher, weil diese dateien in einer schleife geöffnet werden? --> siehe if bedingung. Wer kann mir helfen?
    Hier der gesamte code.
    #include <iostream.h>
    #include <conio.h>
    #include <fstream.h>

    //---------------------------------------------------------------------------

    int main() {

    int z1=1;
    int z2=2;
    int z3=3;
    int z4=4;
    int z5=5;
    int z6=6;
    long anz=0,letzte=13983816;
    char datei1[32] = "lotto";
    char *datei2[26]={{"1"},{"2"},{"3"},{"4"},{"5"},{"6"},{"7"},{"8"},{"9"},{"10"},{"11"},{"12"},{"13"},{"14"},{"15"},{"16"},{"17"},{"18"},{"19"},{"20"},{"21"}};
    char *datei3 = ".txt";
    int i = 0;

    strcat(datei1,datei2[i]);
    strcat(datei1,datei3);

    ofstream ausgabe(datei1,ios::out|ios::app);

    for(z1; z1 < 45 😉 {
    for(z2;z2 < 46;) {
    for(z3;z3 < 47;) {
    for(z4;z4 < 48;) {
    for(z5;z5 < 49;) {
    for(z6; z6 < 50; z6++) {
    anz++;
    ausgabe << anz <<";"<< z1 << ";" << z2 << ";" << z3 << ";" << z4<< ";" << z5 << ";" << z6 << endl;
    if(anz==letzte){
    ausgabe.close();
    getch();
    return 0;
    }
    if(anz%700000==0) {
    ausgabe.close();

    i++;
    strcpy(datei1,"lotto");
    strcat(datei1,datei2[i]);
    strcat(datei1,datei3);
    ofstream ausgabe;
    ausgabe.open(datei1,ios::out|ios::app);
    }
    }
    z5++;
    z6=z5+1;
    }
    z4++;
    z5=z4+1;
    z6=z5+1;
    }
    z3++;
    z4=z3+1;
    z5=z4+1;
    z6=z5+1;
    }
    z2++;
    z3=z2+1;
    z4=z3+1;
    z5=z4+1;
    z6=z5+1;
    }
    z1++;
    z2=z1+1;
    z3=z2+1;
    z4=z3+1;
    z5=z4+1;
    z6=z5+1;
    }

    ausgabe.close();
    cout << anz;
    getch();
    return 0 ;
    }



  • Wer kann mir helfen?
    

    würde ich gern aber ich kanns nicht lesen ! 😕
    sry nicht bös gemeint



  • Um die leserlichkeit zu erhöhen sollte man die Quellcode Funktion des Forums nutzen. Einrücken, wenn man einen Block aufmacht sollte man auch...

    man benutzt diese Funktion so:

    #include <iostream>
    //und dann noch der ganze code
    


  • und um das zu veranschaulichen ein Beispiel:

    #include <iostream>
    using namespace std;
    
    int main()
    {
          cout << "Hallo Welt" << endl;
          return 0;
    }
    


  • aber das problem hab ich immer noch. Und ich weiß auch das man den code auch besser schreiben kann, aber ich habe zwei jahre nicht mehr programmiert und fang wieder von vorne an.

    #include <iostream.h>
    #include <conio.h>
    #include <fstream.h>
    
    //---------------------------------------------------------------------------
    
    int main() {
    
    int z1=1;
    int z2=2;
    int z3=3;
    int z4=4;
    int z5=5;
    int z6=6;
    long anz=0,letzte=13983816;
    char datei1[32] = "lotto";
    char *datei2[26]={{"1"},{"2"},{"3"},{"4"},{"5"},{"6"},{"7"},{"8"},{"9"},{"10"},{"11"},{"12"},{"13"},{"14"},{"15"},{"16"},{"17"},{"18"},{"19"},{"20"},{"21"}};
    char *datei3 = ".txt";
    int i = 0;
    
    strcat(datei1,datei2[i]);
    strcat(datei1,datei3);
    
    ofstream ausgabe(datei1,ios::out|ios::app);
    
            for(z1; z1 < 45 ;) {
               for(z2;z2 < 46;) {
                  for(z3;z3 < 47;)  {
                     for(z4;z4 < 48;)  {
                        for(z5;z5 < 49;)  {
                           for(z6; z6 < 50; z6++)  {
                            anz++;
                            ausgabe << anz <<";"<< z1 << ";" << z2 << ";" << z3 << ";" << z4<< ";"  << z5 << ";" << z6 << endl;
                                if(anz==letzte){
                                   ausgabe.close();
                                   getch();
                                   return 0;
                                }
                              if(anz%700000==0) {
                                ausgabe.close();
    
                                i++;
                                strcpy(datei1,"lotto");
                                strcat(datei1,datei2[i]);
                                strcat(datei1,datei3);
                                ofstream ausgabe;
                                ausgabe.open(datei1,ios::out|ios::app);
                              }
                        }
                        z5++;
                        z6=z5+1;
                        }
                     z4++;
                     z5=z4+1;
                     z6=z5+1;
                     }
                  z3++;
                  z4=z3+1;
                  z5=z4+1;
                  z6=z5+1;
                  }
               z2++;
               z3=z2+1;
               z4=z3+1;
               z5=z4+1;
               z6=z5+1;
               }
            z1++;
            z2=z1+1;
            z3=z2+1;
            z4=z3+1;
            z5=z4+1;
            z6=z5+1;
            }
    
          ausgabe.close();
           cout << anz;
           getch();
            return 0 ;
    }
    


  • @ertan

    tip: schau dir die string klasse aus dem namespace std; an.
    http://www.cppreference.com/cppstring.html

    zum zweiten kannst du dann (nach zwei jahren pause 😉 ) gleich deine header erneuern:

    neuer standard:

    #include <iostream>
    #include <string>
    #include <fstream>
    using namespace std;
    


  • das nutzt auch nichts. Das Problem habe ich immer noch. Das Programm läuft ja, nur werden die Dateien lotto2.txt lotto20 nicht gefüllt. in jede sollten 700000 zeilen geschrieben werden. ca 15MB



  • Also wenn ich das ganze in eine Datei schreibe geht das, nur wird die Datei riesengroß.

    // Dieses Programm läuft aber nur lotto1.txt wird mit 700000 zeilen gefüllt,
    // Die restlichen Dateien bleiben leer,  W A R U M, WO ist der FEHLER ?
    
    #include <iostream>
    #include <conio>
    #include <fstream>
    using namespace std;
    //---------------------------------------------------------------------------
    
    /* Mit diesem Programm sollen alle ca. 14 MIo. möglichen Lottozahlen verteilt in
    20 Dateien (lotto1.txt bis lotto20.txt) der Reihe nach geschrieben werden */
    
    int main() {
    
    int z1=1;
    int z2=2;
    int z3=3;
    int z4=4;
    int z5=5;
    int z6=6;
    long anz=0,letzte=13983816;
    char datei1[32] = "lotto";        // die nächste zeile kann man schöner machen, später
    char *datei2[26]={{"1"},{"2"},{"3"},{"4"},{"5"},{"6"},{"7"},{"8"},{"9"},{"10"},{"11"},{"12"},{"13"},{"14"},{"15"},{"16"},{"17"},{"18"},{"19"},{"20"},{"21"}};
    char *datei3 = ".txt";
    int i = 0;
    
    strcat(datei1,datei2[i]);
    strcat(datei1,datei3);
    
    ofstream ausgabe(datei1,ios::out|ios::app); // erzeugt/öffnet lotto1.txt
    
            for(z1; z1 < 45 ;) {                       // Um der formel n über i gerecht zu
               for(z2;z2 < 46;) {                      // werden, hier 6 for schleifen in-
                  for(z3;z3 < 47;)  {                  // einander verschachtelt.
                     for(z4;z4 < 48;)  {
                        for(z5;z5 < 49;)  {
                           for(z6; z6 < 50; z6++)  {
                            anz++;                          // anzahl der durchläufe . die nächste zeile schreibt in die aktuelle datei
                            ausgabe << anz <<";"<< z1 << ";" << z2 << ";" << z3 << ";" << z4<< ";"  << z5 << ";" << z6 << endl;
                                if(anz==letzte){            // wenn alle 13983816 Möglichketen
                                   ausgabe.close();         // durchlaufen sind, beenden.
                                   getch();
                                   return 0;
                                }  //endif
                              if(anz%700000==0) {    // wenn durchlauf ohne rest durch 700000 teilbar, dann datei
                               ausgabe.close();       // schließen zB. lotto1.txt
    
                              i++;
                              strcpy(datei1,"lotto");         // datei1 = "lotto"
                              strcat(datei1,datei2[i]);       // datei1 = "lotto2"
                              strcat(datei1,datei3);          // datei1 = "lotto2.txt"
                              ofstream ausgabe (datei1,ios::out|ios::app); // nächste datei öffnen zB. lotto2.txt
                              }//endif
                        } //endfor6
                        z5++;
                        z6=z5+1;
                        } //endfor5
                     z4++;
                     z5=z4+1;
                     z6=z5+1;
                     }  //endfor4
                  z3++;
                  z4=z3+1;
                  z5=z4+1;
                  z6=z5+1;
                  }  //endfor3
               z2++;
               z3=z2+1;
               z4=z3+1;
               z5=z4+1;
               z6=z5+1;
               } //endfor2
            z1++;
            z2=z1+1;
            z3=z2+1;
            z4=z3+1;
            z5=z4+1;
            z6=z5+1;
            }  //endfor1
    
          ausgabe.close();
           cout << anz;        // anzahl der durchläufe aufm bildschirm zeigen
           getch();
            return 0 ;
    }  // endmain
    


  • in deiner innersten schleife schreibst du

    ofstream ausgabe (datei1,ios::out|ios::app); // nächste datei öffnen zB. lotto2.txt
    

    das kann nicht funktionieren denn du erzeugst einen neuen ofstream der aber sofort wieder geschlossen wird da er aus seinen scope rausfällt. ( der destruktor ruft dann close() auf.

    eigentlich sollte es funktionieren wenn du diese zeile mit

    ausgabe.open (datei1,ios::out|ios::app); // nächste datei öffnen zB. lotto2.txt
    

    ersetzt. (habs nicht probiert, wenns nicht funktioniert melde dich wieder )



  • thats it. Das ist die Lösung. Es klappt wunderbar.

    nochmals vielen Dank.
    gruß
    ertan



  • Na hoffentlich hast du auch verstanden warum deine version nicht funktioniert hat.
    K.



  • ausgabe.open...
    hat ich auch schon ausprobiert, nur mein fehler war, dass in der zeile davor
    ofstream ausgabe... stand.

    mfg


Anmelden zum Antworten