Toon posts:

[C++] meerdere lijnen van een bestand inlezen?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik ben bezig met een applicatie waarbij ik een config bestand kan inladen, maar nu is m'n probleem dat ik er enkel maar in slaag om een lijn in te lezen, en per plaats ( bv per 30 karakters ) iets in te lezen, ik maak dus iedere keer een offset van 30, waarbij ik dan op die plaats de gewenste waarde verwacht ..

maar nu wil ik dit liever per lijn doen, zo:

abc
def
ghi
jkl

ipv:

abc def ghi jkl ... ( ieder karakter op een vaste plaats )

nu doe ik dit aan de hand van dit stukje code, maar bestaat er geen andere oplossing?

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
                ifstream  bestandlezen;

        void load_config(){
        AnsiString bestandsnaam = Form2->OpenDialog1->FileName;
        bestandlezen.open(bestandsnaam.c_str());
        char  Client[30] = {NULL};
        if (!bestandlezen.eof())bestandlezen.getline(Client,30);
        Form2->config_name->Caption= Client;
        bestandlezen.clear();

        char  Type[30] = {NULL};
        bestandlezen.seekg(30);
        if (!bestandlezen.eof())bestandlezen.getline(Type,30);
        Form2->type_name->Caption= Type;
        bestandlezen.clear();

        char  Identif[30] = {NULL};
        bestandlezen.seekg(60);
        if (!bestandlezen.eof())bestandlezen.getline(Identif,30);
        Form2->id_vak->Text=Identif;
        bestandlezen.clear();

        bestandlezen.close();
        config_geladen =1;
     }


ik lees dus 30 karakters in, en toon dit in m'n form .. daarna lees ik terug 30 karakters in, maar met een offset van 30 .. maar het probleem is hierbij dat dit uiteraard zeer onoverzichtelijk is, en dat zeer eenvoudig vatbaar is voor fouten, want stel dat het 2de stukje data al begint op karakter 29 .. ? dan verlies ik al eentje ..

iemand die een oplossing weet?

alvast zeer erg bedankt!!
Alexander

[ Voor 5% gewijzigd door Verwijderd op 27-09-2006 08:55 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Waarom doe je steeds opnieuw seeken? Je kan toch gewoon voor elke regel opnieuw getline() aanroepen? :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Een bestand bestaat uit regels. Een lijn is een wiskundig of grafisch begrip.

Zoals de poster boven mij ook al zegt, waarom zou je voor elke leesoperatie eerst seeken? Een readline zet zelf in principe de filepositie al aan het eind van de regel en een volgende readline leest gewoon de volgende regel. Dat kan je volhouden tot er geen regels meer zijn...

Ik vind je code ook niet heel efficient overigens. Waarom zou je ook voor elke regel nieuwe variabelen enzo maken? Dit kan je prima kwijt in een lus structuur...

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 13-02 18:54

.oisyn

Moderator Devschuur®

Demotivational Speaker

Overigens is std::getline icm een std::string ook wat handiger, hoef je je niet druk te maken om de maximale regellengte.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • TheNameless
  • Registratie: September 2001
  • Laatst online: 07-02-2025

TheNameless

Jazzballet is vet!

idd een std::getline is veel handiger:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
#include <fstream>
#include <string>

std::ifstream file;
std::string line;
while( std::getline( file, line ) )
{
  if( line == "blaat" )
  {
    //doe iets
  }
}

Ducati: making mechanics out of riders since 1946