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. }
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.