Avatar billede shj Nybegynder
19. september 1999 - 20:30 Der er 2 kommentarer og
1 løsning

fil håndtering udskift ord i fil!

hej Eksperter!
Denne lille kodestump er fra et program jeg arbejder på i øjeblikket
while(!samlign.eof())
      {
        samlign >> ord;
          if(strcmp(ord,argv[3])==0 )
            {
cout <<"ordet "<<argv[3]<<" Findes i "<<argv[2]<<endl;
}
Hvis jeg nu vil udskifte/indsætte argv[3] string pointer i stedet for ord, hvad gør jeg så. Det må være noget med seekp
&put ect.   
please help me
Simon
Avatar billede bjarke Nybegynder
20. september 1999 - 09:02 #1
Et hurtigt svar - der kommer nok et rigtig grundigt fra soepro lige om lidt;-)

Hvis du skal udskifte ordet, så er du nød til med din tell-pointer (tror jeg det er) holde styr på hvor i filen du er INDEN du indlæser ordet. For efter "samlign >> ord" peger pointeren efter ordet i filen og så skal du bare til at finde tilbage - og det er vanskelligere, end at holde styr på hvor du er inden ordet bliver indlæst.

Det er lidt problematisk bare at indsætte ordet
1) Hvis ordene er samme længde, så indsætter du bare der hvor det gamle ord begyndte (hvis du altså sørger for at holde styr på det med en variabel)
2) Hvis det nye ord er kortere kan du evt. erstatte det gamle ord, og så indsætte et par blanke tegn (men det er ikke sikkert, at det er tilfredsstillende - se næste punkt)
3) Hvis det nye ord er længere, så opstår problemet først for alvor (jeg har selv bakset lidt med det for nylig og løst problemet - jeg kan evt. sende programstumpen når jeg kommer hjem, hvis du er interesseret). Problemet er ligesom når du skriver dansk stil i hånden: man kan ikke bare tilføje, for så skriver du jo oveni det som følger efter. Det betyder så, at du faktisk er nødt til at flytte hele resten af filens indhold (ja, det er sandt).
Avatar billede bjarke Nybegynder
20. september 1999 - 09:10 #2
Ikke afprøvet:

while(!samlign.eof())
{
samlign.seekp(ios::beg, samlign.tellg() );
samlign >> ord;
...
}

Så skulle put-pointeren pege på starten af ordet, efter at du har indlæst det! Dvs, at du i tilfælde 1 og 2 direkte kan skrive:

samlign << "<nyt ord>";

Men som du nok er klar over, så kræver det jo at samlign er et fstream objekt, som er åbnet til både at læse og skrive.
Avatar billede shj Nybegynder
20. september 1999 - 11:49 #3
hej Bjarke tak for dit svar, det var vist også sådan jeg fik problemet løst selv. Jeg brugte strlen(ord) - sted hvor indsætning skulle være
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester