[C++] ANSI encoding en ifstream

Pagina: 1
Acties:

  • JeromeB
  • Registratie: September 2003
  • Laatst online: 19-03 22:07
Ik wil middels ifstream een tekstbestand uitlezen en de inhoud in een string (genaamd content) stoppen. Dat tekstbestand is ANSI gecodeert. Dit gaat inprincipe goed alleen wordt er aan het eind een extra karakter uitgelezen en toegevoegd aan de content-string. Ik kan dat laatste karakter uit de content-string verwijderen, maar waar komt dat karakter vandaan?

De desbetreffende code:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <fstream>
#include <string>

int main()
{
    char token;
    std::string content;

    ifstream input("tekstbestand.txt");

    while(input.good())
    {
        token = input.get();
        std::cout << token << std::endl;
        content+=token;
    }

    // content.erase(content.length()-1); // mogelijke oplossing

    std::cout << "content: " << content << std::endl;
    std::cout << "lengte: " << content.length() << std::endl;
    std::cout << "laatste karakter: " << content[content.length()-1] << std::endl;

    std::cin.get();
    return 0;
}


Ik compileer deze code met MinGW 2.95.2-1 onder Windows XP.


Ik heb trouwens meer encoding-problemen (unicode) icm C++. Ik heb wel wat interessante aritkelen gevonden, maar toch kom ik daar niet écht verder mee. Als jullie nog tips hebben dan zou ik die graag willen weten.


edit:

Het lag dus aan mijn while-loopje en had niets met encoding te maken. Ik vroeg me al dagen af waar het probleem lag en nu zie ik het zo 8)7

Oplossing:
C++:
1
2
3
4
5
6
7
token = input.get();
while(input.good())
{
    content+=token;
    std::cout << token << std::endl;
    token = input.get();
}

[ Voor 17% gewijzigd door JeromeB op 16-08-2005 20:48 ]

PC load letter? What the fuck does that mean?


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Lees ook eens iets over hoe je met de STL programmeert; je kan beter algorithms gebruiken etc dan zelf while loops schrijven. Een stuk veiliger.

  • JeromeB
  • Registratie: September 2003
  • Laatst online: 19-03 22:07
Ik begrijp dat het vaak handiger is om algorithms (of eventueel iterators) te gebruiken om door een container te lopen, maar in dit geval snap ik het niet helemaal. Het while-loopje dat ik gebruik heeft toch niets met STL te maken?

Of doel je op de stukjes content.length()-1?

[ Voor 10% gewijzigd door JeromeB op 16-08-2005 22:41 ]

PC load letter? What the fuck does that mean?


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Je hebt ook dingen als std::istream(buf)_iterator, daar kan je mee over streams iteraten. std::string ondersteunt ook iterators: al die dingen kunnen samen werken met de STL.

  • JeromeB
  • Registratie: September 2003
  • Laatst online: 19-03 22:07
Ik wist niet dat er ook stream iterators waren. Daar ga ik eens wat info over opzoeken. Bedankt.

PC load letter? What the fuck does that mean?