🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #15976

Re: windows trager t.o.v. linux?

#15976
From: Ronny Dierckx
Date: Fri, 07 Jul 2000 00:00
107 lines
3880 bytes
Dit is vreemde code. Heb je dit geschreven om
je systeem zwaar te belasten (voor testen) ?

> void main ()
> {
> //************declaraties***********************
>  string tempstring, te_zoeken,stringbuffer;
>  char bestandsnaam [75],schrijfnaar[75],x,buffer [10000],inlezen;
>  int aantal=0,atl_lijn_teller=0;
>  long tijd;
>  FILE * inleesbestand;
>  FILE * resultaatbestand;
> 
>  cout<<"Geef de directory en de bestandsnaam in van het bestand: ";
>  cin>>bestandsnaam;
> 
> //***********inputcontrole***********************
>  while ((inleesbestand = fopen (bestandsnaam, "r")) == NULL)
>    {
>         cout<<"Sorry, het opgegeven bestand kan niet gevonden worden"<<endl;
>      cout<<"Geef opnieuw je bestandsnaam op: " ;
>      cin>>bestandsnaam;
> 
>    }
> 
>  cout<<"Geef op waarnaar het programma moet zoeken: \n";
>  getline(cin,te_zoeken);
>  cout<<"naar welk bestand moet geschreven worden?: \n";
>  cin>>schrijfnaar;
> 
> //**************start tijdsopname na correcte invoer***********************
>  tijd=time(0);
>  cout<<"Bezig met verwerken van het bestand..."<<endl;
> 
> //*************verwerking van het aantal karakters***********************
>  inleesbestand = fopen (bestandsnaam, "r");
>  for ( ;getc (inleesbestand) != EOF; aantal++);
>  fclose (inleesbestand);

Je zou hier ook al eens de tijd moeten afprinten, dan weet je
beter welke operatie het langste duurt.
Je kan trouwens beter gewoon de filesize opvragen om 
het aantal karakters te kennen ...

> 
> //*************opzoeken van de string**********************************
>  int teller=0;
>  inleesbestand = fopen (bestandsnaam, "r");
>  FILE *output= fopen(schrijfnaar, "w");
>  char zinneke[1000];
> 
>  while (fgets(zinneke,10000, inleesbestand))

Bugje: dit moet fgets(zinneke,1000, inleesbestand)
       zijn.

>  { string stringzinneke;
>    atl_lijn_teller++;           //verwerking atl lijnen
>   for(int x=0; x<1000 && zinneke[x]!='\n';x++)
>   {
>    stringzinneke= stringzinneke+ zinneke[x];
>   }

Zeer inefficiente code, die tot gevol heeft dat 
er zeer veel memory allocaties moeten gebeuren.


> 
>  if(stringzinneke.find(te_zoeken) != -1)
>    {
>     stringzinneke.append(1,'\n');
>     fwrite(zinneke,stringzinneke.length(),1,output);
>     teller++;
>    }
>  }

Ipv String.find() te gebruiken, kan je veel beter
simpelweg strstr(zinneke, te_zoeken) gebruiken,
dan wordt alles een stuk eenvoudiger:

  while (fgets(zinneke,1000, inleesbestand))
  {
    const char* ptr = strstr(zinneke, te_zoeken);
    if (ptr)
    {
	// resulaten wegschrijven
	// Ik weet niet juist wat jouw string class
	// doet, maar ik zou die code toch ook maar
	// eens nakijken.
	... 
    }
  }

>  fclose(inleesbestand);
>  fclose(output);
> 
> //****************uitvoer van de resultaten****************************
>  cout<< "Bestand verwerkt in "<<time(0)-tijd<<" seconden \n";
>  cout<<"Het bestand "<<bestandsnaam<<" bevat "<<aantal<<" karakters en "<<atl_lijn_teller<<" lijnen"<<endl;
>  cout<<te_zoeken<<" komt in "<<teller<<" zinnen voor"<<endl;
> 

Probeer het eens met deze veranderingen. Volgens mij
zal het op windows EN op linux veel sneller gaan.

Ronny
Technical Details
Message-ID: <39658EDA.1C29B97@get.be>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <oi_85.3142$Ud2.44517@afrodite.telenet-ops.be> <3964AE88.672E6219@get.be> <61495.10471$Ud2.169488@afrodite.telenet-ops.be>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,b9f6caafd8dd067a
X-Google-Attributes: gidfcea4,public
From: Ronny Dierckx <dr@get.be>
Subject: Re: windows trager t.o.v. linux?
Date: 2000/07/07
Message-ID: <39658EDA.1C29B97@get.be>
X-Deja-AN: 643374340
Content-Transfer-Encoding: 7bit
References: <oi_85.3142$Ud2.44517@afrodite.telenet-ops.be> <3964AE88.672E6219@get.be> <61495.10471$Ud2.169488@afrodite.telenet-ops.be>
X-Accept-Language: en
Content-Type: text/plain; charset=us-ascii
X-Trace: bru5-newsr2.be.uu.net 962957035 12152 194.7.66.10
MIME-Version: 1.0
Newsgroups: be.comp.programming