PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : eine Reihe von Dateien in C++ anlegen


Tyrann
2003-06-10, 08:59:30
ich habe folgendes Problem:

using namespace std;

// int main(blabla)

int anzahl=0,i=0,n1,n2,n3,nX,nY,nAnzahl,used,stelle;
string strVergleich,strErg[25000],strAuswertung[230000],anftoken,ttok,dateiname;


stelle=strErg[0].find_first_of( ";" );
anftoken=strErg[0].substr(0,stelle);
dateiname=anftoken+"_monate.csv";
ofstream ausgdatei(dateiname.c_str());


for (int i=0;i<nY-2;i++)
{
stelle=strErg[i].find_first_of( ";" );

if (anftoken==strErg[i].substr(0,stelle))
{
cout << strErg[i] << endl;

/////obiges erscheint auf dem Bildschirm wie es soll


ausgdatei << strErg[i] << endl;

///// dies hier erscheint nur in der ersten Datei komplett, in
den nachfolgenden Dateien jeweils nur die erste Zeile (siehe ein paar
zeilen tiefer)



}
else
{
anftoken=strErg[i].substr(0,stelle);
ausgdatei.close();
dateiname=anftoken+"_monate.csv";
ofstream ausgdatei(dateiname.c_str());
//cout << strErg[i] << endl;
ausgdatei << strErg[i] << endl;

///// nur diese Zeile erscheint in den späteren Dateien

}
}

hier noch ein Ausschnitt der Daten falls es jemanden interessiert:
0; F30050R5862; 2;
0; F30213R 580; 1;
0; F30213R 760; 1;
0; F30213R1003; 1;
0; F30213R1017; 1;
0; F30213R1182; 1;
0; F30213R1325; 1;
0; F30213R1339; 1;
0; F30213R1340; 8;
100; F30807U2521; 2;
100; F30213R 812; 2;
100; F30213R 952; 1;
100; F30213R 954; 1;
100; F30213R 965; 5;
102; F30213R 812; 1;
102; F30213R 815; 3;
102; F30213R 932; 1;
102; F30213R 935; 1;
45; F30861R 332; 1;
45; F32006R1028; 1;
45; F32006R1034; 1;
46; F30050R5893; 2;
46; F30050R5897; 8;
46; F30050R6111; 1;
46; F30213R 968; 1;

Tyrann
2003-06-13, 10:06:35
ach kommt schon Leute,
kann mir denn keiner helfen ?

Demirug
2003-06-13, 10:31:37
Beschreib doch mal bitte die Aufgabenstellung aus dem Code ist das schwer nachzuvollziehen.

Tyrann
2003-06-13, 11:37:25
es sollen mehrere dateien angelegt werden.
z.B. 1. Datei: 0_monate.csv
Inhalt: alle Zeilen die mit 0; beginnen
2. Datei 100_monate.csv
Inhalt: alle Zeile die mit 100; beginnen

u.s.w.

problem: nach dem ersten close und neuanlegen des dateideskriptors
steht in den späteren dateien jeweils nur die erste zeile drin

Demirug
2003-06-13, 11:53:41
Bei Neuanlegen des dateideskriptors wird die Datei im truncate Modus geöffnet. Dadurch wird alles was bereits in der Datei war wieder verworfen.

Abhilfe:

1. Datei bei 2ten benutzten im Append Modus öffnen.

2. Dateien nach dem ersten öffnen einfach offen lassen und die dateideskriptoren zwischenspeichern. Am Ende dann alle dateien schliessen.

Tyrann
2003-06-14, 10:42:17
das kanns nicht ganz sein, da ich jede Datei nur einmal anfasse und die ganzen Daten in einem Rutsch hineinschreibe.

So wie ich festgestellt habe wird die Datei nach verlassen des else-Zweigs wieder geschlossen, ich weiß nur nicht warum