Article View: be.comp.programming
Article #15977Re: windows trager t.o.v. linux?
From: Thunderbird
Date: Fri, 07 Jul 2000 00:00
Date: Fri, 07 Jul 2000 00:00
109 lines
4619 bytes
4619 bytes
Hehe, neen dat is totaal niet bedoeld om mijn systeem zwaar te belasten, maar 't feit is dat ik
nog niet met bestanden heb leren werken.
'k Heb dus maar een samenraapsel van andere programma's genomen, blijkbaar werkte dat
optimaal in Linux, dus heb ik de code dan in windows gebruikt... met alle gevolgen vandien.
(zie verder in de tekst nog een opmerking)
In article <39658EDA.1C29B97@get.be>, Ronny Dierckx <dr@get.be> wrote:
>
> 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.
Mja, dat dacht ik ook, maar hoe zet je dan op een efficiente manier een 1-dimensionele tabel
om naar een string?
>
>
>>
>> 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:
<4yh95.832$eI2.16602@afrodite.telenet-ops.be>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<oi_85.3142$Ud2.44517@afrodite.telenet-ops.be> <3964AE88.672E6219@get.be> <61495.10471$Ud2.169488@afrodite.telenet-ops.be> <39658EDA.1C29B97@get.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: "Thunderbird" <goeroe@hotmail.com> Subject: Re: windows trager t.o.v. linux? Date: 2000/07/07 Message-ID: <4yh95.832$eI2.16602@afrodite.telenet-ops.be> X-Deja-AN: 643398296 References: <oi_85.3142$Ud2.44517@afrodite.telenet-ops.be> <3964AE88.672E6219@get.be> <61495.10471$Ud2.169488@afrodite.telenet-ops.be> <39658EDA.1C29B97@get.be> X-Trace: afrodite.telenet-ops.be 962962688 212.123.13.235 (Fri, 07 Jul 2000 11:38:08 MET DST) Organization: Pandora - Met vlotte tred op Internet NNTP-Posting-Date: Fri, 07 Jul 2000 11:38:08 MET DST Newsgroups: be.comp.programming