Avatar billede montago Praktikant
03. august 2006 - 11:37 Der er 7 kommentarer og
2 løsninger

ifstream problem med load af string

Jeg er igang med at loade en text fil ind i en vector, hver linie i text filen består af
[STRING][mellemrum][INT]

eksempel:---------------
McLaren GTR2Demo.exe 1
GameData\\sim_DEMO.txt 1
------------------------

Min string indeholder ikke mellemrum, men derimod '\' som 'fin >>' går helt bananas over

KODE :----------------------
        ifstream fin(Filename);
        do{
            filelist_type flt;
            fin >> flt.path >> flt.version;
            Vec.push_back(flt);
        }while(!fin.eof());
        fin.close();
----------------------------


Hvad gør jeg for at loade min fil korrekt ??
Avatar billede montago Praktikant
03. august 2006 - 11:39 #1
ahh pis - hehe har lige spottet et mellemrum i "Maclaren GTR2Demo.exe"

spørsmålet bliver så - hvordan løser jeg mellemrums problemet ?
Avatar billede mcgoat Nybegynder
03. august 2006 - 11:55 #2
Fandt lige det her, måske det kan hjælpe

If we want this whole line in one char array, we cannot do it with the ">>" operator because the spaces (white space) between each word would stop the file extraction. For instance, if we had said:


char sentence[101];
fin >> sentence;


We'd want sentence to now contain, "This is really awesome!" But because of the white space, it now only contains "This". Obviously, there is a way to read in the whole line, and it is the method getline(). This is how we would do it.


fin.getline(sentence, 100);
Avatar billede mcgoat Nybegynder
03. august 2006 - 11:55 #3
Avatar billede montago Praktikant
03. august 2006 - 12:00 #4
hmm

problemet med getline, er at jeg bagefter skal splitte char arrayet, for at få min integer...

men det bliver nok løsningen
Avatar billede arne_v Ekspert
03. august 2006 - 22:05 #5
hvis man er til stream på stream på stream så

C:\>type test.txt
a 1
b b 2
c c c 3
C:\>type test.cpp
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>

using namespace std;

int main()
{
    ifstream f("C:\\test.txt");
    string line;
    while(getline(f,line))
    {
        stringstream ss(line);
        string name = "";
        string part;
        ss >> part;
        while(ss.peek() != EOF)
        {
            if(name.length() > 0) name += " ";
            name += part;
            ss >> part;
        }
        stringstream ss2(part);
        int num;
        ss2 >> num;
        cout << name << endl;
        cout << num << endl;
    }
    return 0;
}

C:\>g++ test.cpp -o test.exe

C:\>test
a
1
b b
2
c c c
3
Avatar billede montago Praktikant
03. august 2006 - 22:49 #6
Hey Arne :P

Jeg løste problemet lidt kræativt... jeg har erstattet mellemrum med ¿ som bagefter fjernet med en Replace funktion... fylder mindre kodemæssigt...

men du får point alligevel :)
Avatar billede arne_v Ekspert
04. august 2006 - 01:25 #7
mcgoat var først med getline

måske en deler

svar fra mig
Avatar billede mcgoat Nybegynder
04. august 2006 - 08:55 #8
:)
Avatar billede montago Praktikant
04. august 2006 - 13:46 #9
Bemærk at svaret, var at erstatte mellemrum med et ¿ som bagefter kan fjernes nemt
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