Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Tietojen lataus taulukkoon

Sivun loppuun

osku91 [01.12.2006 18:39:04]

#

Miten saan ladattua teksti tiedostosta luvut taulukkoon niin että tekstitiedostossa olevat luvut ovat samalla rivillä?

Blaze [01.12.2006 18:51:48]

#

Ja kieli oli...?

osku91 [01.12.2006 18:54:35]

#

kieli on c++

Sisuaski [01.12.2006 20:30:37]

#

No yksinkertaisimmillaan C++:ssa menee suunnilleen näin:

#include <fstream>
#include <iterator>
#include <vector>
...
std::ifstream in("luvut.txt");
std::vector<int> v((std::istream_iterator<int>(in)), std::istream_iterator<int>());

Huomaa ylimääräiset sulkeet tuon v:n konstruktorille lähetettävän ensimmäisen parametrin ympärillä! Ilman niitä kääntäjä tulkitsee tuon C++:n syntaksin takia funktion esittelyksi ja antaa liudan virheitä kun v:tä yrittää käyttää jossain.

osku91 [02.12.2006 21:08:54]

#

en kyllä nyt ymmärtänyt yhtään mitään

sqwiik [03.12.2006 00:15:36]

#

Tarkoitatko siis, että ne luvut ovat tekstitiedostossa samalla rivillä ja että ne pitää sieltä lukea taulukkoon?

Metabolix [03.12.2006 01:36:02]

#

Onko taulukko tuttu laitos? Jos ei, tutustu C-oppaan taulukko-osuuteen tai Sisuaskin käyttämään vector-luokkaan.

int luvut[10];
std::vector<int> lukuvektori;
int luku;
lukuvektori.push_back(luku);

Ovatko tiedostot tuttuja? Jos eivät, tutustu tiedostovirtoihin.

std::ifstream tiedosto("juttu.txt");
tiedosto >> muuttuja;

Ovatko silmukat tuttuja? Jos eivät, tutustu vaikkapa C-oppaan silmukkaosuuteen.

while (tiedosto >> luku) {
    lukuvektori.push_back(luku);
}
for (i = 0; i < lukuvektori.size(); ++i) {
    std::cout << lukuvektori[i] << std::endl;
}

Noista osista pitäisi jo onnistua. :)

Kunnon C++-koodari tekee sen tuolla Sisuaskin tavalla. :P Sellaiset tavat vain eivät oikein aukene, jos ei edes pidempi mutta toiminnaltaan selkeämpi vaihtoehto ole selvä.

osku91 [03.12.2006 14:26:44]

#

siis kun saan ladattua luvun teksti tiedostosta muuttujaan niin että aina yhdellä rivillä olevat luvut ovat yhdessä muuttujassa. Mutta se pitäisi saada niin että yhdellä rivillä on esim. 5 lukua ja ensimmäinen luku tulee taulukon ensimmäiseen lukuun ja toinen luku taulukon toiseen lukuun. Siis jos tekstitiedostossa lukee:12345 , niin silloin

taulukko[0] = 1
taulukko[1] = 2
taulukko[2] = 3
taulukko[3] = 4
taulukko[4] = 5

Eli mitä silloin pitää laittaa

ifstream syotto("tiedot.txt");
for (int i = 0; i<5; i++)
{
  syotto >> taulukko[i];
}

tuon tilalle?

Metabolix [03.12.2006 14:30:21]

#

Mutta silloinhan luku on 12345. Numerot ovat sitten asia erikseen, ne voit lukea vaikkapa merkki kerrallaan.

char merkki;
int luku;
tiedosto >> merkki;
luku = merkki - '0';

osku91 [03.12.2006 14:39:47]

#

kiitos nyt sain sen toimimaan. :D


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta