/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
ofstream /ifstream -variabel??
Fra : Anders Jensen


Dato : 25-02-01 12:39

Jeg har tidligere lænet mig op af gruppens overbærenhed m.h.t til
delitantiske spørgsmål -Så jeg tillader mig at spørge

Jeg arbejder med et program ( i VC++6.0 ) der behandler et antal af
programmet ukendte filer. - Hvilket ikke giver problemer.
Problemet består i, at man ( tilsyneladende ) ikke kan genbruge
ophægtningen på ifstream ell/og ofstream

Derved kommer jeg til, at mangle, at gøre ( i dette tilfælde ) ophægtningen
variabel

eks: ofstream varibel_fil(nr,ios::trunc);

Kan ophægtningen genbruges eller kan variabel_fil gøres variabel - Nogen
forslag ??

NUN
LINUS
linus@post2.tele.dk





 
 
Igor V. Rafienko (25-02-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 25-02-01 13:32

* Anders Jensen


> Jeg arbejder med et program ( i VC++6.0 ) der behandler et antal af
> programmet ukendte filer. - Hvilket ikke giver problemer. Problemet
> består i, at man ( tilsyneladende ) ikke kan genbruge ophægtningen
> på ifstream ell/og ofstream


Mulig dette er et av de tilfellene der norsk og dansk er vesentlig
forskjellige, men hva mener du med "genbruge ophægtningen på ifstrem"?
Vil du ved hjelp av en [i|o]fstream variabel kunne aksessere flere
filer etter hverandre?


> Derved kommer jeg til, at mangle, at gøre ( i dette tilfælde )
> ophægtningen variabel
>
> eks: ofstream varibel_fil(nr,ios::trunc);
>
> Kan ophægtningen genbruges eller kan variabel_fil gøres variabel -
> Nogen forslag ??


Med forbehold om at jeg forstoid deg riktig:

Ja, du kan la en [i|o]stream variabel være forbundet med forskjellige
filer (så lenge det ikke skjer samtidig):

$ cat baz.cpp
#include <fstream>
#include <algorithm>


int
main( int argc, char *argv[] )
{
using namespace std;

ifstream ifs;

while ( *++argv ) {
ifs.open( *argv );

cout << ifs.rdbuf();

ifs.close();
}
}
$ g++ baz.cpp
$ cat data*
foo
bar
baz
zot
$ ./a.out data*
foo
bar
baz
zot
$


BTW, koden over har elendig feilhåndtering, men den burde være en
pekepinne (med forbehold om at jeg svarte på det du spurte etter).





ivr
--
Besides, meat tends to run away when possible, or fights. Either
response presents behavioral challenges too complex for any existing
robot.
      -- Stuart Wilkinson, inventor of the "gastrobot"

Anders Jensen (26-02-2001)
Kommentar
Fra : Anders Jensen


Dato : 26-02-01 11:47

Takker for svar

> Mulig dette er et av de tilfellene der norsk og dansk er vesentlig
forskjellige

genbruge ophægtningen på ifstrem = Genbruge den syntaks der i dette tilfælde
er knyttet til ifstream ( dvs variabel_fil )
Jeg er ikke helt sikker på, at ordet ophægtning er korrekt dansk, men det
følger strukturen

at knytte til = at tilknytte
at spole frem (til) = at fremspole (til)
at hægte op (på) = at ophægte (på)
at virke på = at påvirke

> Ja, du kan la en [i|o]stream variabel være forbundet med forskjellige
filer (så lenge det ikke skjer samtidig):

Hm..Jeg er kommet til den konklusion, at der så må være en fejl i min VC++
6.0. - Den akcepterer
ikke følgende ( Der kommer en redefinitionsfejl )

strcpy(nr,"Sprout000.dat");
ofstream variabel_fil(nr,ios::trunc);
close variabel_fil;
strcpy(nr,"Sprout011.dat");
ofstream variabel_fil(nr,ios::trunc);
close variabel_fil;
( Det var årsagen til, at jeg ønskede, at ændre variabel_fil til en
variabel )

Derimod aksepterer den

y=0;strcpy(nr,"Sprout000.dat");
while (y<2){y++;
ofstream sprout_fil(nr,ios::trunc);strcpy(nr,"Sprout011.dat");}

NUN
LINUS
linus@post2.tele.dk




Igor V. Rafienko (26-02-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 26-02-01 13:14

* Anders Jensen

[snip]

> > Ja, du kan la en [i|o]stream variabel være forbundet med
> > forskjellige filer (så lenge det ikke skjer samtidig):
>
> Hm..Jeg er kommet til den konklusion, at der så må være en fejl i min VC++
> 6.0. - Den akcepterer
> ikke følgende ( Der kommer en redefinitionsfejl )
>
> strcpy(nr,"Sprout000.dat");
> ofstream variabel_fil(nr,ios::trunc);
> close variabel_fil;


Huh? Det _skal_ være

variabel_fil.close();

(IOW, close er en member function).


> strcpy(nr,"Sprout011.dat");
> ofstream variabel_fil(nr,ios::trunc);


Dette vil ikke fungere fordi du definerer/deklarerer den samme
variabelen 2 ganger i samme skop (bedre kjent som "one-definition
rule"). Hvis du vil bruke den _samme_ syntaksen, foreslår jeg at du
følger Mogens sin råd og introduserer en ekstra blokk, der du
oppretter en ny variabel_fil for hver gang kontrollen går gjennom
blokken. Det er naturligvis like greit å deklarere/definere
'variabel_fil' bare en gang og så bruke open()/close()/is_open() (slik
jeg eller Mogens har demonstrert).


> close variabel_fil;
> ( Det var årsagen til, at jeg ønskede, at ændre variabel_fil til en
> variabel )


Hvis du vil knytte 'variabel_fil' til flere filer _i den samme
blokken_ bruk heller open/close.


> Derimod aksepterer den
>
> y=0;strcpy(nr,"Sprout000.dat");
> while (y<2){y++;
> ofstream sprout_fil(nr,ios::trunc);strcpy(nr,"Sprout011.dat");}


Naturligvis blir dette akseptert, da while introduserer en ny blokk.

VC++ ser ut til å oppføre seg helt korrekt i dette tilfellet.





ivr
PS: jo før du slutter å bruke char*'ere, desto enklere blir livet
ditt. strcpy() er _helt_ unødvendig i koden over.
--
Besides, meat tends to run away when possible, or fights. Either
response presents behavioral challenges too complex for any existing
robot.
      -- Stuart Wilkinson, inventor of the "gastrobot"

Mogens Hansen (25-02-2001)
Kommentar
Fra : Mogens Hansen


Dato : 25-02-01 14:03

Hej Anders,

"Anders Jensen" <linus@post2.tele.dk> wrote in message
news:97ar3b$ark$1@news.inet.tele.dk...
> Jeg har tidligere lænet mig op af gruppens overbærenhed m.h.t til
> delitantiske spørgsmål -Så jeg tillader mig at spørge
>
> Jeg arbejder med et program ( i VC++6.0 ) der behandler et antal af
> programmet ukendte filer. - Hvilket ikke giver problemer.
> Problemet består i, at man ( tilsyneladende ) ikke kan genbruge
> ophægtningen på ifstream ell/og ofstream
>
> Derved kommer jeg til, at mangle, at gøre ( i dette tilfælde )
ophægtningen
> variabel
>
> eks: ofstream varibel_fil(nr,ios::trunc);
>
> Kan ophægtningen genbruges eller kan variabel_fil gøres variabel - Nogen
> forslag ??
>

Hvis jeg har forstået dit spørgsmål rigtigt, vil du gerne kunne bruge din
variabel til først at åbne een fil, og derefter en anden:

Jeg har to bud på en løsning:
1: brug funktionerne "is_open", "close" og "open"
2: lad det blive styret af scope af variablen

Jeg foretrækker umiddelbart løsning nr. 2.
De to løsninger er vist nedenfor:

#include <fstream>

using namespace std;

const char* FILES[] = { ... };


void func1(void)
{
ifstream is;

for(size_t i = 0; sizeof(FILES)/sizeof(FILES[0]) != i; ++i) {
// rebind
if(is.is_open()) {
is.close();
}
is.open(FILES[i]);

// Use the file
if(is) {
// ...
}
}
}

void func2(void)
{
for(size_t i = 0; sizeof(FILES)/sizeof(FILES[0]) != i; ++i) {
ifstream is(FILES[0]);

// Use the file
if(is) {
// ...
}
}
}

int main(void)
{
func1();
func2();

return 0;
}

Venlig hilsen

Mogens Hansen



Anders Jensen (26-02-2001)
Kommentar
Fra : Anders Jensen


Dato : 26-02-01 11:46

Tak - det ser rigtigt ud - Det må jeg straks afprøve

--
NUN
LINUS
linus@post2.tele.dk





Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste