O
hab mich grad mal über Sortieralgorithmen belesen. Denke bald dass in meinen Fall eher noch eine längere Rechenzeit entstehen würde. Wenn ich beispielsweise Quicksort nehmen würde müsste ich ja ziemlich oft springen und neue Felder eröffnen. Das springen in einer Text Datei hat ja einen gewissen Aufwand. Da ich die Zeilen mit nehmen muss, müsste ich bei 20000 Zeilen zwischenzeitlich ja 20000 Dateien anlegen und diese dann zusammenfügen. Oder sehe ich das jetzt falsch? Gebe einfach mal mein Code mit, vielleicht sieht ja jemand was auf Anhieb wie ich Rechenzeit sparen kann, wenn nicht ist auch egal
dateisortierennachx(int anzahlx) ///////////////sortiert Datei nach x
{
CopyFile("c:\\testdaten.txt", "c:\\zwischen.txt", TRUE);
std::ofstream file;
file.open("c:\\geordnet.txt");
int z;
for (z=1; z<=anzahlx; z=z+1)
{
cout << z<<endl;
Datei = fopen ("c:\\zwischen.txt" , "r");
char abd[20];
char buffer1[100];
char bufferablage[100];
memset(buffer1,0,100);
memset(bufferablage,0,100);
int i=-1,i2=-1,merker=0;
float zwischen; float anfang=100000;
short int zeile;
//////////////////////////////////////////////////////////kleinste suchen und in Datei schreiben
while(1)
{
i=i +1;
i2=i2+1;
zwischenstelle = zwischenstelle+1;
zeile=zeile+1;
cRead=fgetc(Datei);
if(feof(Datei))
{
buffer1[i2]='\n';
buffer1[i2+1]=0;
if (zwischen <anfang)
{
// /n machen
memset(bufferablage,0,100);
memcpy(bufferablage,buffer1,100);////buffer machen
}
memset(buffer1,0,100);
memset(abd,0,20);
merker=0;
i=-1;
i2=-1;
break;
}
switch(cRead)
{
case '0': {abd [i]='0';buffer1[i2]='0';
break;}
case '1': {abd [i]='1';buffer1[i2]='1';
break;}
case '2': {abd [i]='2';buffer1[i2]='2';
break;}
case '3':{ abd [i]='3';buffer1[i2]='3';
break;}
case '4':{abd [i]='4';buffer1[i2]='4';
break;}
case '5':{ abd [i]='5';buffer1[i2]='5';
break;}
case '6':{ abd [i]='6';buffer1[i2]='6';
break;}
case '7':{ abd [i]='7';buffer1[i2]='7';
break;}
case '8':{ abd [i]='8';buffer1[i2]='8';
break;}
case '9':{ abd [i]='9';buffer1[i2]='9';
break;}
case '.':{ abd [i]='.';buffer1[i2]='.';
break;}
case ' ':{
if (merker==0) {
zwischen=atof(abd);
merker=1;}
buffer1[i2]=' ';
memset(abd,0,20);
i=-1;
break;
}
case '\n': {
buffer1[i2]='\n';
buffer1[i2+1]=0;
if (zwischen <anfang)
{
memset(bufferablage,0,100);
memcpy(bufferablage,buffer1,100); ////buffer machen
}
memset(buffer1,0,100);
memset(abd,0,20);
merker=0;
i=-1;
i2=-1;
zeile=0;
break;
}
}
}//while ende
file << bufferablage;
memset(buffer1,0,100);
memset(abd,0,20);
i=-1;
i2=-1;
merker=0;
fclose (Datei);
////////////////////////////////////////////////////löschen von zeile
Datei = fopen ("c:\\zwischen.txt" , "r");
std::ofstream file2;
file2.open("c:\\zwischen2.txt");
float austausch=zwischen;
anfang=100000;
while(1)
{
i=i +1;
i2=i2+1;
cRead=fgetc(Datei);
if(feof(Datei))
{
buffer1[i2]='\n';
if (memcmp(bufferablage,buffer1,100)!=0)
{
file2 << buffer1;
}
memset(buffer1,0,100);
memset(abd,0,20);
merker=0;
i=-1;
i2=-1;
break;
}
switch(cRead)
{
case '0': {abd [i]='0';buffer1[i2]='0';
break;}
case '1': {abd [i]='1';buffer1[i2]='1';
break;}
case '2': {abd [i]='2';buffer1[i2]='2';
break;}
case '3':{ abd [i]='3';buffer1[i2]='3';
break;}
case '4':{abd [i]='4';buffer1[i2]='4';
break;}
case '5':{ abd [i]='5';buffer1[i2]='5';
break;}
case '6':{ abd [i]='6';buffer1[i2]='6';
break;}
case '7':{ abd [i]='7';buffer1[i2]='7';
break;}
case '8':{ abd [i]='8';buffer1[i2]='8';
break;}
case '9':{ abd [i]='9';buffer1[i2]='9';
break;}
case '.':{ abd [i]='.';buffer1[i2]='.';
break;}
case ' ':{
if (merker==0) {
zwischen=atof(abd);
merker=1;}
buffer1[i2]=' ';
memset(abd,0,20);
i=-1;
break;
}
case '\n': {
buffer1[i2]='\n';
if (memcmp(bufferablage,buffer1,100)!=0)
{
file2 << buffer1;
}
memset(buffer1,0,100);
memset(abd,0,20);
merker=0;
i=-1;
i2=-1;
break;
}
}
}/
file2.close();
fclose(Datei);
DeleteFile("c:\\zwischen.txt");
CopyFile("c:\\zwischen2.txt", "c:\\zwischen.txt", TRUE);
DeleteFile("c:\\zwischen2.txt");
}//ende For Schleife
DeleteFile("c:\\zwischen.txt");
}