|
| Hente data fra en fil med getline() Fra : Thomas Korsgaard |
Dato : 29-03-04 08:19 |
|
Hej NG
Jeg har en fil, som er formateret på følgende måde:
1 2.0 0.8 24 6 3
17 1.7 0.4 23 18 4 24 6
18 1.3 0.5 23 100 17 4
4 2.8 1.2 18 17 6 7 10 11 100
....
Og jeg kunne godt tænke mig at hente dataen ind linje på linje. Indtil
videre har jeg gjort følgende:
ifstream infile("flag.txt");
og vil så indlæse med:
infile.getline(buffer,MAX);
hvor bufffer er et char-array med MAX karakterer. Mit problem er nu at
jeg ikke kan finde ud af hive informationen ud af buffer. Hvordan finder
jeg ud af hvike ints og doubles, som er i buffer? Lige nu er de gemt som
char, og jeg kan ikke lure hvordan jeg skal "parse" dem om til ints
eller doubels. Er der nogen der har en god ide. Den ville være værdsat.
På forhånd tak!
/Thomas Korsgaard
| |
Ivan Johansen (29-03-2004)
| Kommentar Fra : Ivan Johansen |
Dato : 29-03-04 09:48 |
|
Thomas Korsgaard wrote:
> Og jeg kunne godt tænke mig at hente dataen ind linje på linje. Indtil
> videre har jeg gjort følgende:
>
> ifstream infile("flag.txt");
>
> og vil så indlæse med:
>
> infile.getline(buffer,MAX);
Jeg vil anbefale at du bruger std::string i stedet for et char array. Så
undgår du problemer med størrelsen.
std::string buffer;
std::getline(infile, buffer);
> hvor bufffer er et char-array med MAX karakterer. Mit problem er nu at
> jeg ikke kan finde ud af hive informationen ud af buffer. Hvordan finder
> jeg ud af hvike ints og doubles, som er i buffer? Lige nu er de gemt som
> char, og jeg kan ikke lure hvordan jeg skal "parse" dem om til ints
> eller doubels. Er der nogen der har en god ide. Den ville være værdsat.
Jeg vil foreslå en stringstream:
std::istringstream Stream(buffer);
double D1, D2;
int I1, I2, I3;
Stream >> I1 >> D1 >> D2 >> I2 >> I3;
Du skal selvfølgelig huske fejltjek og det er muligt at du bliver nødt
til at bruge en løkke i stedet for at konvertere det hele på en linie,
men princippet skulle fremgå.
Ivan Johansen
| |
|
|