0

i have a xml document from which i must get the following things, Riigi_nimi, pindala of it and rahvaarv
with the riigi_nimi and pindala i have no problems, but i can't get the program to print rahvaarv, i just can't find a way to copy it into a new string:-| .
coding i have used so far is(never mind the weard symbols, it is just really hard to put everything into english is in the attachement

can you give some small tips what should i do?
i have attached the fails, xml opens only in mozilla or just open with some editig program

Attachments
<xml>
<Liikmesriik>
<Riigi_nimi>Austria</Riigi_nimi>
<Pindala> 83858km</Pindala><Rahvaarv>8 116 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Belgia</Riigi_nimi>
<Pindala> 30528km</Pindala><Rahvaarv>10 318 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Eesti</Riigi_nimi>
<Pindala> 45227km</Pindala><Rahvaarv>1 323 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Hispaania</Riigi_nimi>
<Pindala> 504782km</Pindala><Rahvaarv>41 060 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Holland</Riigi_nimi>
<Pindala> 41865km</Pindala><Rahvaarv>16 149 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Iirimaa</Riigi_nimi>
<Pindala> 70273km</Pindala><Rahvaarv>3 956 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Itaalia</Riigi_nimi>
<Pindala> 301323km</Pindala><Rahvaarv>57 423 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Kreeka</Riigi_nimi>
<Pindala> 131957km</Pindala><Rahvaarv>10 499 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Kpros</Riigi_nimi>
<Pindala> 9251km</Pindala><Rahvaarv>802 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Leedu</Riigi_nimi>
<Pindala> 65302km</Pindala><Rahvaarv>3 444 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Luksemburg</Riigi_nimi>
<Pindala> 2586km</Pindala><Rahvaarv>453 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Lti</Riigi_nimi>
<Pindala> 64589km</Pindala><Rahvaarv>2 307 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Malta</Riigi_nimi>
<Pindala> 315,6km</Pindala><Rahvaarv>394 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Poola</Riigi_nimi>
<Pindala> 312685km</Pindala><Rahvaarv>38 587 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Portugal</Riigi_nimi>
<Pindala> 92345km</Pindala><Rahvaarv>10 062 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Prantsusmaa</Riigi_nimi>
<Pindala> 543965km</Pindala><Rahvaarv>60 144 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Rootsi</Riigi_nimi>
<Pindala> 449964km</Pindala><Rahvaarv>8 876 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Saksamaa</Riigi_nimi>
<Pindala> 357021km</Pindala><Rahvaarv>82 476 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Slovakkia</Riigi_nimi>
<Pindala> 49034km</Pindala><Rahvaarv>5 402 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Sloveenia</Riigi_nimi>
<Pindala> 20253km</Pindala><Rahvaarv>1 984 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Soome</Riigi_nimi>
<Pindala> 338144km</Pindala><Rahvaarv>5 207 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Suurbritannia</Riigi_nimi>
<Pindala> 242900km</Pindala><Rahvaarv>59 251 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Taani</Riigi_nimi>
<Pindala> 43094km</Pindala><Rahvaarv>5 364 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Tehhi</Riigi_nimi>
<Pindala> 78866km</Pindala><Rahvaarv>10 236 000</Rahvaarv>
</Liikmesriik>
<Liikmesriik>
<Riigi_nimi>Ungari</Riigi_nimi>
<Pindala> 93030km</Pindala><Rahvaarv>9 877 000</Rahvaarv>
</Liikmesriik>
</xml>
/*Informaatika II IDK0032 Projekt
Alustatud:21.04.2006
Muudetud:23.2006
Tegija:Mari Sults 05029 IAPB24
Eesmrk: Programm leiab, kui mitu korda on pindalalt suurim 
liikmesriik vikseimast suurem ning mitu korda on elanikke suurima 
rahvaarvuga riigis rohkem, kui vikseima rahvaarvuga riigis. Vljastab 
ka nende riikide nimed ning vastavad pindalad ja rahvaarvud.
Hetkel:Vljastab xml'ist riigi nime, pindala, ja peaks kuid ei vljasta, ja ka
       rahvaarvu.
Teha veel: Kik, mis eesmrgis kirjas. 
*/


#include <stdio.h> // standardne sisend-vljund
#include <conio.h> // klaviatuur-kuvar 
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

int main(void) 
{     printf("Informaatika II IDK0032 Projekt\n\nTegija: Mari Sults 050629IAPB\n\n"
              "Eesm2rk: Programm leiab, kui mitu korda on pindalalt suurim\n"
              "liikmesriik vikseimast suurem ning mitu korda on elanikke\n"
              "suurima rahvaarvuga riigis rohkem, kui v2ikseima rahvaarvuga\n" 
              "riigis. V2ljastab ka nende riikide nimed ning vastavad pindalad\n"
              "ja rahvaarvud.\n\n\n\n");
    //muutujad
    char *fail="EuroopaLiit.xml";
    char rida[65535], *pos;
    char *riigid[65535], *pos1;
    int *pindala[65535];
    int *rahvas[65535];
    int OnRiik=0, OnPindala=0, OnRahvas=0;
    int i, j, k; //suvaline abimuutuja
    FILE *fp;
   	fp=fopen(fail, "r");
	if(fp){ // fail edukalt avatud
       j = 0;
	   while (!feof(fp)){
	       fgets(rida, sizeof(rida), fp);
	       pos = strtok(rida,"<>");
	       //kui on see rida, kus asub riigi nimi, siis
	      if (strcmp(pos, "Riigi_nimi") == 0){
              for (i=0;i<2;i++){
                  pos = strtok(NULL,"<>");
                  if ((pos != NULL)&&(i==0)){  
                     //riigid[i] = new char [strlen(pos)]; //loome uue stringi
                     //strcpy(riigid[i], pos);
                     sscanf(pos,"%d",&riigid[i]);
                     printf("riik:%s\n",pos); 
                  }
              }                 
           }
          //kui on see rida, kus on pindala, siis
	      if (strcmp(pos, "Pindala") == 0){
              for (i=0;i<5;i++){
                  pos = strtok(NULL,"<>");
                  if ((pos != NULL)&&(i==0)){ 
                     sscanf(pos,"%d",&pindala[i]);
                     printf("pindala: %d\n",pindala[i]);
                  }
               }                              
           } 
        
          //kui on see rida, kus rahvaarv, siis
          /*if (strcmp(pos, "Rahvaarv") == 0){
              for (i=0;i<10;i++){
                 pos = strtok(NULL,"<>");
                 //pos1= strtok(NULL," ");
                  if ((pos != NULL)&&(k==0)){  
                     sscanf(pos,"%d",&rahvas[i]);
                     printf("rahvas: %d\n",rahvas[i]);                     
                     i++;
                  }                  
              }                              
           }    */   
	   }
	    
    }  
    else printf("Faili %s avamine ebannestus\n", fail);
    printf("Vajuta suvalisele klahvile...");
    getch(); 
    return 0;
}
2
Contributors
3
Replies
4
Views
11 Years
Discussion Span
Last Post by tydruk
0

my object is to get all the info printed out, and when i have managed that i can continue with my project.
i hope you can help me, i'm very new to c++

0

Here is a corrected version. All the info gets printed out. But I don't know about any side-effects.

Attachments
/*Informaatika II IDK0032 Projekt
Alustatud:21.04.2006
Muudetud:23.2006
Tegija:Mari Sults 05029 IAPB24
Eesmrk: Programm leiab, kui mitu korda on pindalalt suurim 
liikmesriik vikseimast suurem ning mitu korda on elanikke suurima 
rahvaarvuga riigis rohkem, kui vikseima rahvaarvuga riigis. Vljastab 
ka nende riikide nimed ning vastavad pindalad ja rahvaarvud.
Hetkel:Vljastab xml'ist riigi nime, pindala, ja peaks kuid ei vljasta, ja ka
       rahvaarvu.
Teha veel: Kik, mis eesmrgis kirjas. 
*/


#include <stdio.h> // standardne sisend-vljund
#include <conio.h> // klaviatuur-kuvar 
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

int main(void) 
{     printf("Informaatika II IDK0032 Projekt\n\nTegija: Mari Sults 050629IAPB\n\n"
              "Eesm2rk: Programm leiab, kui mitu korda on pindalalt suurim\n"
              "liikmesriik vikseimast suurem ning mitu korda on elanikke\n"
              "suurima rahvaarvuga riigis rohkem, kui v2ikseima rahvaarvuga\n" 
              "riigis. V2ljastab ka nende riikide nimed ning vastavad pindalad\n"
              "ja rahvaarvud.\n\n\n\n");
    //muutujad
    char *fail="EuroopaLiit.xml";
    char rida[65535], *pos;
    char *riigid[65535], *pos1;
    int *pindala[65535];
    int *rahvas[65535];
    int OnRiik=0, OnPindala=0, OnRahvas=0;
    int i, j, k; //suvaline abimuutuja
    FILE *fp;
   	fp=fopen(fail, "r");
	if(fp){ // fail edukalt avatud
       j = 0;
	   while (!feof(fp)){
	       fgets(rida, sizeof(rida), fp);
	       pos = strtok(rida,"<>");
	       //kui on see rida, kus asub riigi nimi, siis
	      if (strcmp(pos, "Riigi_nimi") == 0){
              for (i=0;i<2;i++){
                  pos = strtok(NULL,"<>");
                  if ((pos != NULL)&&(i==0)){  
                     //riigid[i] = new char [strlen(pos)]; //loome uue stringi
                     //strcpy(riigid[i], pos);
                     sscanf(pos,"%d",&riigid[i]);
                     printf("riik:%s\n",pos); 
                  }
              }                 
           }
          //kui on see rida, kus on pindala, siis
	      if (strcmp(pos, "Pindala") == 0){
              for (i=0;i<3;i++){
                  pos = strtok(NULL,"<>");
                  if ((pos != NULL)&&(i==0)){ 
                     sscanf(pos,"%d",&pindala[i]);
                     printf("pindala: %d\n",pindala[i]);
                  }
               }                              
           } 
        
          //kui on see rida, kus rahvaarv, siis
          if (strcmp(pos, "Rahvaarv") == 0){
              for (i=0;i<10;i++){
                 pos = strtok(NULL," ");
                 //pos1= strtok(NULL," ");
                  if ((pos != NULL)&&(k==0)){  
                     sscanf(pos,"%d",&rahvas[i]);
                     printf("rahvas: %d\n",rahvas[i]);                     
                     i++;
                  }                  
              }                              
           }       
	   }
	    
    }  
    else printf("Faili %s avamine ebannestus\n", fail);
    printf("Vajuta suvalisele klahvile...");
    getch(); 
    return 0;
}
0

thank you very much, this helps me out a lot, and the side effects can be taken care of i hope :D

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.