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.htmlzum 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