Mulla on ongelmana, että en osaa parsia tiedostosta lukemani rivin sisältöä. Koitin googeletella apuja, mutta ei siitä mitään tullut, kun joka esimerkkiin oli tungettu pointterikikkailuja tai jotain muuta pro-meininkiä. (pointtereiden hyötyä en o koskaan ymmärtänyt)
Luen tiedostosta rivejä, joissa on aina rivillä viisi numeroa, jotka on sitten erotettu tabulaattorilla toisistaan. Tavoitteena olisi lukea ne taulukkoon, jossa sitten voisin suorittaa luetulla rivillä olleilla numeroilla vertailuja.
1 2 3 4 5
6 7 8 9 10
2 3 4 5 6
jne...
Siis tähän tyyliin ne on filussa, mut tabulaattori välilyönnin tilalla.
Kannattaako mun käyttää 2-ulotteista taulukkoa: taulu [100][5]; että pääsen vertailemaan niitä rivin lukuja keskenään? Tällä hetkellä se lukee aina rivin 1-ulotteisen taulukon soluun.
/****************************/
string s;
int laskuri=0;
string filusta[100];
//Luetaan tiedosto riveittäin taulukkoon
while ( getline(fi,s) )
{
filusta[laskuri]=s;
laskuri ;
continue;
}
fi.close();
/********************************/
Entä pitääkö mun suorittaa joku tyyppimuunnos, että noi luvut ovat oikeasti numeroita, eivätkä tekstiä?
Yritin sellasta, että int s; mutta se valitti jotain virhettä heti. Sitten koitin int numero =int(s); mutta taas heitti jotain erroria. Jotain tyyppierroria mun muistaakseni.
Luen tiedostosta rivejä, joissa on aina rivillä viisi numeroa, jotka on sitten erotettu tabulaattorilla toisistaan. Tavoitteena olisi lukea ne taulukkoon, jossa sitten voisin suorittaa luetulla rivillä olleilla numeroilla vertailuja.
1 2 3 4 5
6 7 8 9 10
2 3 4 5 6
jne...
Siis tähän tyyliin ne on filussa, mut tabulaattori välilyönnin tilalla.
Kannattaako mun käyttää 2-ulotteista taulukkoa: taulu [100][5]; että pääsen vertailemaan niitä rivin lukuja keskenään? Tällä hetkellä se lukee aina rivin 1-ulotteisen taulukon soluun.
/****************************/
string s;
int laskuri=0;
string filusta[100];
//Luetaan tiedosto riveittäin taulukkoon
while ( getline(fi,s) )
{
filusta[laskuri]=s;
laskuri ;
continue;
}
fi.close();
/********************************/
Entä pitääkö mun suorittaa joku tyyppimuunnos, että noi luvut ovat oikeasti numeroita, eivätkä tekstiä?
Yritin sellasta, että int s; mutta se valitti jotain virhettä heti. Sitten koitin int numero =int(s); mutta taas heitti jotain erroria. Jotain tyyppierroria mun muistaakseni.
Vastaukset 9
Vanhimmat
Tuohan onnistuu scanf:llä melko helposti. Luet vain rivin ja sitten scanf:llä teksti numeroiksi.
http://www.suomipelit.com/files/koodiaitta/34/filut.zip
Ja ihan itse tehty rajapinta tiedostoille. JOs tarvetta voin yrittää selittää miten tuota käytetään.
tarvitaan jos muuttaa char/int
atoi(),itoa()
mihin tarvitset 2ulotteisen taulukon? jos oikein tajusin niin et mihinkään.
//esim.
#include
char teksti[10]=("50234");
int i;
//teksti numeroiksi
i = atoi( teksti );
//numerot tekstiksi
itoa (i,teksti,10);
"pointtereiden hyötyä en o koskaan ymmärtänyt) "
no tässäpä nyt ongelmaasi liittyen? yksinkertaisesti.
jos et tiedä valmiiksi kuinka suuri luettavan tiedoston koko on niin mitä sitten kun muuttujasi string str[100] ylittyy?
sitten tulee(tai siis jo alunalkaen ja pois tuo str) kyseeseen pointterit ja new...
AINA osoittimia - kielestä riippumatta ? jos käytetään prosessorin hierarkiaa OIKEIN.
riippuu siitä mitä tarkoitat "Perustasolla".
Perustasolla prosessori käyttää ykkösiä ja nollia(virta päällä/virta pois päältä).
kytkiminä toimivien puolijohteitten rajapintojen yli varauksia - akseptorit ja donorit avainasemassa.
:D
Suosittelisin kyllä osoittemien oppimista koska paitsi että ne ovat käteviä ja säästävät muistia niin ne hyvin käytettynä helpottaa koodia huomattavasti. Mutta, jos käyttää C :an STL kirjastoa niin onnistuu se ilman osoittimiakin.
Tässä esimerkki:
#include
#include
#include
#include
using namespace std;
int main(int argc, char *argv[])
{
/* Muuttujat */
vector< vector > matriisi;
vector m_rivi;
string buffer;
string::iterator it;
ifstream tiedosto;
stringstream arvo_s;
int arvo;
/* Avataan tiedosto lukua varten */
tiedosto.open ("tiedosto.txt");
/* Luetaan tiedosto rivi riviltä ja tallennetaan matriisiin */
while( getline(tiedosto,buffer) )
{
/* Luodaan uusi rivi */
m_rivi.clear();
/* Muutetaan tekstirivin numerot luvuiksi(int) */
for(it=buffer.begin(); it != buffer.end() ; it )
if(*it != '\t')
{
arvo_s > arvo; arvo_s.clear();
m_rivi.push_back(arvo);
}
/* Tallennetaan rivi matriisiin */
matriisi.push_back(m_rivi);
}
/* Suljetaan tiedosto */
tiedosto.close();
/* Tulostetaan luettu matriisi */
for(int i=0; i
"
for(int i=0; i