15. juli 2002 - 21:37Der er
6 kommentarer og 2 løsninger
Fjerne dubletter fra en textfil
OK. Here goes...
Jeg skal lave en funktion der kan åbne en fil, og fjerne dubletter i den.
Filen indeholder en liste emd IP-adresser.
eks.
168.192.1.12 168.192.1.13 168.192.1.14
Osv.
Jeg havde tænkt mig noget lignende :
void Remove(char File[]){ ifstream input_file(File,ios::in); if(!input_file){ cerr << "Could not open " << 'File' << endl; return; }
while(!input_file.eof()){ Læs filen ind i et array - 1 linie ad gangen.. gem 1 linie i et andet array og læs 2 linie fra det 1. Sammenlign. Gør dette igennem hele filen. Hvis der er dubletter, så fjern dem fra array 1. } Skriv tilsidst det rettede array til en ny fil. }
Du kan putte hver IP (== hver linie???) ind i en liste/vector og sammenligne med hele listen hver gang du læser en linie. Det tager lang tid, men det virker. Er det en lang fil???
// Noget lign. (pseudokode): bool match; while(!input_file.eof()) { match = false; læs næste linie, put i en variabel strIP; for alle strings i listen { sammenlign med strIP; Hvis findes, sæt match til true; } hvis match er false, push_back strIP på listen; } // Her er listen/vectoren komplet og indeholder ingen dubletter.
Kender du til STL lister/vectore??? Ellers skal du vist lige have en uddybende forklaring. Kan desværre ikke lave kode, da jeg sidder midt i en analysefase på en maskine uden kompilere af nogen art!!!
// Return number of removed IP's or -1 on error int Remove(char File[]) { // Open input file std::ifstream input_file(File); if(!input_file) return -1;
soepro >> Hmm, jeg havde læst opgaven som at der skulle skrives tilbage til samme fil... (jo, man kunne selvfølgelig så have skrevet til en midlertidig fil og bagefter omdøbt osv...)
jpk >> Det skal der måske også - men derfor kunne man stadig godt sortere/indsætte løbende, og dermed undgå mellem-sorteringen. Mht. checket på om IP-adreseen allerede findes, kunne den jo så nemt ændres til at lave binær søgning, sådan at den endelige algoritme stadig kun var n*log(n)i stedet for n^2 som den er nu. (Min - ikke din, for qsort er en n*log(n) algotime.) Men så er vi vist ovre i flue-knepperiet.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.