lezen en schrijven van bestanden

Status
Niet open voor verdere reacties.

tchembado

Gebruiker
Lid geworden
28 nov 2006
Berichten
93
hoi allemaal,

als ik in een apart bestand, een .txt file ofzo het volgende heb staan:

2, 4, 56, 39, 0
4, 43, 3, 49, 3
3, 9, 39, 48, 43

hoe kan ik dit deze file dan getal per getal lezen?, en dan bijvoorbeeld in een
int[3][5] zetten?

En hoe kan ik een bepaald getal hierin veranderen?

Ik zou al heel blij als ik het antwoord op een van de twee vragen kan krijgen,

groetjes,

Merijn
 
Cool , zulke dingen vind ik altijd leuk op op te lossen :D

william :cool:
 
Laatst bewerkt:
ik geef je hier in bijlage een samenvatting/vertaling van een engelse tutorial over werken met bestanden (lezen/schrijven).

om veilig te casten kan je waarschijnlijk zoiets doen (uit mijn duim, concept)
Code:
string ditiseengetal = "13";
int getal;
if (getal = (int)ditiseengetal)
    cout << "gelukt";
else
    cout << "mislukt";

--jeetee
 

Bijlagen

Laatst bewerkt:
Hoi,

Dit zou het lezen moeten afhandelen:

Code:
#include <iostream>
#include <fstream>

using namespace std;

ifstream myFile("test.txt");
int pos[3][4];
char letter[2];

int main()
{   
               for(int i = 0;  i <=2; i++){
               for(int z = 0;  z <=4; z++){
               myFile.getline(letter,50,',');
               pos[i][z] = (int)atoi(letter);
               cout<<pos[i][z]<<",";
               }
               cout <<"\n";
               }              
    system("PAUSE>0");
    return 0;
}

Ik heb de tekst wel wat aangepast maar ik neem aan dat dat geen probleem is , als het wel een probleem is laat je het maar eventjes weten ik ben nu toch op dreef :p


2,4,56,39,0,
4,43,3,49,3,
3,9,39,48,43,


(let op de komma's achteraan)

William:cool:
 
@ william: atoi wordt ten zeerste afgeraden sinds C++99. mss is het beter stringstreams te gebruiken als conversiemedium ...

--johan
 
atoi() is nog een onderdeel van de C-taal, niet van C++. Dit betekent dat de achterliggende code van de functie in C-implementie zit, niet in het nieuwere C++.

atoi() is minder 'buffer-safe' dan stringstreams (die gebruiken dynamische allocatie).

Het voordeel van stringstreams is dat ze bovendien van elk standaardtype naar elk standaardtype kunnen converteren,. zo kan je 1 functie gebruiken op te converteren ipv een andere functie per bron-doel-paar.

Stringstreams zijn onderdeel van de STL... niet alle conversiefuncties zijn dat! (itoa is bvb een wondiws-specifieke methode)

Ik kan maar 1 geval aanduiden waarin atoi boven stringstreams moet gekozen worden: Wanneer je een grote (>10000) hoeveelheid moet converteren. atoi is sneller dan een stringstream.

Tenslotte geef ik je hier een functie die werkt met stringstreams en alles naar alles converteert (indien mogelijk natuurlijk)
convert.h
Code:
#ifndef CONVERSIE_H
#define CONVERSIE_H

#include <iostream>
#include <sstream>
using namespace std;

template <class doelType, class inputType>

doelType convert(const inputType & t)
{
    stringstream s;   //een stringstream aanmaken voor zowel lezen als schrijven
    s << t;           //de input in de stringstream plaatsen
    doelType resultaat;  //een variable van het juiste output-type aanmaken
    s >> resultaat;      //de opgeslagen input, naar de output converteren
    return resultaat;
}

#endif  //CONVERSIE_H
main.cpp
Code:
#include "convert.h"
#include <iostream>

int main()
{
    string input;
    cout << "Geef een geheel getal in: ";
    cin >> input;
    cout << input << " + 2 = " << convert<int>(input) + 2 << endl;
    
    cin.get();
    return 0;
}

--Johan
 
keb het al is even bekeken, maar nu stoot ik op onverklaarbare problemen :shocked:

bij mijn code:

Code:
 #include "conversie.h"
#include <iostream>
#include <fstream>

using namespace std;

ifstream myFile("test.txt");
int pos[3][4];
char letter[2];

int main()
{   
               for(int i = 0;  i <=2; i++){
               for(int z = 0;  z <=4; z++){
               myFile.getline(letter,50,',');
               pos[i][z] = convert<int>(letter);
               cout<<pos[i][z]<<",";
               }
               cout <<"\n";
               }              
    
    cout<<endl;
    
    
    
    
               for(int i = 0;  i <=2; i++){
               for(int z = 0;  z <=4; z++){
               cout<<pos[i][z]<<",";
               }
               cout <<"\n";
               }  
            
    
    system("PAUSE>0");
    return 0;
}

krijg ik de volgende output:

2,4,56,39,0,
4,43,3,49,3,
3,9,39,48,43,

2,4,56,39,4,
4,43,3,49,3,
3,9,39,48,43,

Het volgende staat echt in test.txt:
2,4,56,39,0,
4,43,3,49,3,
3,9,39,48,43,

Ik krijg dus twee keer de zelfde output, maar met één cijfer verschil. Hoe valt dit te verklaren?
 
Laatst bewerkt:
de for-loop van z... z mag maar van 0 tem 3 gaan dus:
Code:
for (int z = 0; z < 4: z++)

--Johan
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan