[vc++] data inlezen

Pagina: 1
Acties:
  • 50 views sinds 30-01-2008

  • Lord_T
  • Registratie: Oktober 2000
  • Laatst online: 31-07 09:50
ok... omdat mijn vorige topic in het niets is verdwenen... (druk op verstuur bericht... en er staat niets :?)

wil de volgende data inlezen. Deze data staat in een file d:\Tractor.txt
Tractor01 00:00 23:59
Tractor02 00:00 23:59
Tractor03 00:00 23:59
Tractor04 00:00 23:59
etc...

Ik wil dit doen in een console applicatie gemaakt in vc++ (6)
Nou heb ik 2 dingen geprobeerd en beide werken nog niet....

code:
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
28
#include <iostream.h>
#include <limits.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
#include <fstream.h>
#include <string>

Combination::Combination()
{
                int aStart,aEnd;
                char * aName;
    char Buffer[29];
    FILE    *f = (FILE *)NULL;

    char filename[_MAX_PATH] = "d:\\Tractor.txt";
    cout<<filename<<endl;   
                f =fopen(filename, "r");
    if (f == (FILE *)NULL)
        cout<<"file not found!"<<endl;
    while(!feof(f))
    {   fgets(Buffer,29,f);
        cout<<Buffer<<endl;
    }
    fclose(f);
}


Dan krijg ik de beste output tot nu toe.. dat wil zeggen hij vult die buffer met de data... maar hoe krijg ik dit opgeknipt? Ik wil hebben:
aName = Tractor01
aStart = 0
aEnd = 1439

Het andere dat ik heb geprobeerd werkt ook niet helemaal en de output is gewoon slechter :?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    ifstream inputfile;
    inputfile.open(filename);
    if(!inputfile.is_open())
        cout<<"file not opened"<<endl;
    else
        cout<<"inputfile opened"<<endl;

    while (! inputfile.eof() )
    {

        inputfile.getline (Buffer,29);
        cout << Buffer<<endl;
    }

    
    inputfile.close();


Dit geeft iedere keer een blanke regel ertussen en doet de laatste regel 2x :?

Verder heb ik dan dus ook nog niet het opgeknipt...

Geteste methoden:
fgets / string / etc maar die krijg ik niet verder aan de praat...

Nou had ik zoiets van ok... dan zijn het nu array's met characters... die neem je en kopieer je uit de grote array...

dus in die while loop zet je:
code:
1
2
3
4
5
6
7
8
9
char Test[10];

while...
{
           ....
           for(int i =0; i<10;i++)
                 Test[i]= Buffer[i];
          cout<<Test<<" ";
}

En dan krijg je toch de hele buffer te zien en wat vreemde characters er tussen door....

ja ja... niet iedereen heeft dezelfde kennis... wees daarom ook eens gewillig en geef een antwoord op een vraag ;)


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

  1. je inputfile ziet eruit als een fixed-format string. Eerst 9 chars inlezen, vervolgens 5 en vervolgens 5 geeft je in volgorde de naam.
  2. indien niet fixed format, met strchr kun je spaties zoeken om daarop te breaken.
  3. fscanf is een fantastische functies die je perfect kunt leren dit soort fileformats uit te lezen

Professionele website nodig?


Verwijderd

strtok werkt volgens ook wel

  • RealCato
  • Registratie: Juli 2000
  • Laatst online: 07-06-2025
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
28
29
30
31
32
33
34
35
36
37
// first we read in data from textfile

    char * DataFile = "d:\\tractor.txt";
    int mNrOfTractors = 42;         // change this to your value
    char *line;
    char TractorString[2];
    char TractorString[0] = '\0';   // dunno if necessary (empty the cell)
    int TractorID;
    char StartString[4];
    char StartString[0] = '\0'; // dunno if necessary (empty the cell)
    int StartID; 


    ifstream inputfile;
    inputfile.open(DataFile);

    for (int i=0; i<mNrOfTractors; i++)             
    {
        inputfile >> line;
        sprintf(buf, "%s", line);

        for (int j=7; j<9; j++) // characters 7 and 8 of every line (tractor number)
        {
            strcat(TractorString, buf[j]);
            TractorID = atoi(TractorString); // atoi <== argument to integer. converts strings to integers
        }

        for (j=10; j<14; j++)
        {       
            strcat(StartString, buf[i]);
            StartID = atoi(StartString);
        }   

        // zelfde er nog ff achteraan gooien voor endtime, en laat die dubbele punt dan weg,
        // kun je meteen omrekenen
    }
    inputfile.close();

Dit heb ik naar em gestuurd, zal wel niet werken, maar ja tis leuk voor het idee he ;)

[ Voor 6% gewijzigd door curry684 op 31-07-2003 23:52 . Reden: En [code] tags zijn ook leuk ]

Rijtjeshuis 170 m^2 uit 1955, bij renovatie in 2022 dak/vloer/spouwisolatie, overal HR++, vvw benedenverdieping, 7x Jaga Strada en 2 handdoekradiatoren met Tado’s. Quatt hybrid op dakkapel sinds einde 2023.


  • RealCato
  • Registratie: Juli 2000
  • Laatst online: 07-06-2025
bah (*#&*(% MSDN weer installeren anders kan ik neit opzoeken wat strchr en strtok doen :S

modbreak: anders laat je HK-style replies in de HK

[ Voor 36% gewijzigd door curry684 op 31-07-2003 23:48 ]

Rijtjeshuis 170 m^2 uit 1955, bij renovatie in 2022 dak/vloer/spouwisolatie, overal HR++, vvw benedenverdieping, 7x Jaga Strada en 2 handdoekradiatoren met Tado’s. Quatt hybrid op dakkapel sinds einde 2023.


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Who is John Galt?


  • Lord_T
  • Registratie: Oktober 2000
  • Laatst online: 31-07 09:50
uhm gaf inderdaad wat fouten...
array van size 0 pakt niet...

en dit was ook een vreemde fout:

error C2664: 'strcat' : cannot convert parameter 2 from 'char' to 'const char *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast


blijkbaar werkt die strcat niet helemaal lekker :(

ja ja... niet iedereen heeft dezelfde kennis... wees daarom ook eens gewillig en geef een antwoord op een vraag ;)


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

Die strcats enzo zijn niet nodig, atoi stopt toch al bij elke delimiter, dus ook bij dubbele punt of spatie..
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const int LINE_BUF_SIZE = 128,
          MIN_LINE_SIZE = 21,
          NAME_LEN = 9;
          
while(.......)
{
    char line[LINE_BUF_SIZE];
    inputfile.getline(line, sizeof(line), '\n');
    if (strlen(line) >= MIN_LINE_SIZE)
    {
        line[NAME_LEN] = 0;
        char *pName = line;
        int startTime = atoi(line + NAME_LEN + 1) * 60 + atoi(line + NAME_LEN + 4);
        int endTime   = atoi(line + NAME_LEN + 7) * 60 + atoi(line + NAME_LEN + 10);            
        cout << pName << ": " << startTime << ", " << endTime << endl;
    }
}

www.madwizard.org


  • Lord_T
  • Registratie: Oktober 2000
  • Laatst online: 31-07 09:50
thnx...

dat laatste werkte en is bij deze gebruikt!

ja ja... niet iedereen heeft dezelfde kennis... wees daarom ook eens gewillig en geef een antwoord op een vraag ;)


  • Lord_T
  • Registratie: Oktober 2000
  • Laatst online: 31-07 09:50
ok... allemaal prima.. maar 1 ding dat ik nog gewoon zou willen weten... wat moet je doen om 2x een data string in te lezen... dus zeg maar
Tractor01 blablabla blablabla2 1200 1400

Ik bedoel dat de methode dus nu werkt als er maar 1 string in zit.... hoe werkt dat alleen dus met meerdere?

ja ja... niet iedereen heeft dezelfde kennis... wees daarom ook eens gewillig en geef een antwoord op een vraag ;)


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

Zijn het variabele strings of altijd met vaste grootte? Bij vaste strings kun je de spaties vervangen door een 0-byte, zo krijg je een serie losse strings. Nummers parsen met atoi gaat ook goed als de nummers maar afgesloten worden door een delimiter (alles behalve een cijfer, dus ook spatie/dubbele punt/0-byte).. Het enige wat je hoeft te doen is de index van elk element te bepalen en van daaruit verder werken.
Bij variabele strings kun je fscanf wel gebruiken, of handmatig parsen.

www.madwizard.org


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Lord_T schreef op 01 August 2003 @ 16:30:
ok... allemaal prima.. maar 1 ding dat ik nog gewoon zou willen weten... wat moet je doen om 2x een data string in te lezen... dus zeg maar
Tractor01 blablabla blablabla2 1200 1400

Ik bedoel dat de methode dus nu werkt als er maar 1 string in zit.... hoe werkt dat alleen dus met meerdere?
Whatever nu ga je maar een boek kopen. Uit je eerste post blijkt al dat je te weinig van C++ weet om dit probleem aan te kunnen pakken, maar gisteren streek ik nog over m'n hart. Met deze vraag d'r bij wordt het een groot GoT-is-mijn-helpdesk-doe-eens-mijn-code-schrijven topic.

Oftewel: toedels :)

Professionele website nodig?

Pagina: 1

Dit topic is gesloten.