Try to read a. txt file

Asked

Viewed 71 times

1

Well I’m trying to read from a . txt file, but when I try to read and put in variables it’s giving me all the wrong info, now wrong places. I’ve tried to use Debug’s tool but can’t figure out why...

Here is the file . txt:

15  
29  
1;100;100;1  
2;150;150;1  
3;230;200;2  
4;100;250;2  
5;366;84;1  
6;565;74;1  
7;840;118;1  
8;1018;313;3  
9;971;502;3  
10;491;561;2  
11;844;399;2  
12;651;305;2  
13;387;319;2  
14;174;424;2  
15;172;561;1  

First line are the vertices, the second the edges.
The other lines are:
Number of the Vertice;position x; position y; type of Vertice

My code to read file:

bool Grafo::Load(const string &fich_grafo, const string &fich_pessoas) {
// Abrir o ficheiro
ifstream in_file(fich_grafo);

// Variaveis auxiliares
string buffer;
int x = 0, y = 0, vertice = 0, tipo = 4, parametro = 0;

// Verificar se o ficheiro foi aberto corretamente  
if (!Uteis::FicheiroAberto(&in_file)) {
    cout << "Nao foi possivel abrir o ficheiro " << fich_grafo << endl;
    exit(1);
}

// Retirar os vertices
getline(in_file, buffer);
n_vertices = atoi(buffer.c_str());

// Retirar as arestas
getline(in_file, buffer);
n_arestas = atoi(buffer.c_str());

while (!in_file.eof()) {
    getline(in_file, buffer);
    stringstream ss(buffer);
    parametro = 0;
    while (getline(ss, buffer, ';')) {

        if (parametro == 0) {
            ss >> vertice;
        }
        if (parametro == 1) {
            ss >> x;
        }
        if (parametro == 2) {
            ss >> y;
        }
        if (parametro == 3) {
            ss >> tipo;
        }
        parametro++;
    }
    cout << vertice << " " << x << " " << y << " " << tipo << endl;
}
cout << "Vertices: " << n_vertices << " Arestas: " << n_arestas << endl;
return NULL;
}

The output is:

100 100 1 4
150 150 1 4
230 200 2 4
100 250 2 4
366 84 1 4
565 74 1 4
840 118 1 4
1018 313 3 4
971 502 3 4
491 561 2 4
844 399 2 4
651 305 2 4
387 319 2 4
174 424 2 4
172 561 1 4
422 623 1 4
722 693 1 4
1118 313 3 4
1139 258 3 4
1146 179 2 4
1117 102 2 4
1045 36 3 4
976 195 3 4
928 93 1 4
639 452 1 4
639 452 1 4
2 45 1 4
4 50 1 4
5 50 1 4
13 60 1 4
10 60 1 4
10 60 1 4
16 60 1 4
15 51 1 4
6 32 1 4
5 23 1 4
13 8 1 4
11 6 1 4
8 5 1 4
9 10 1 4
7 60 1 4
11 34 1 4
16 60 1 4
4 9 1 4
6 42 1 4
17 9 1 4
9 42 1 4
18 42 1 4
3 40 1 4
4 42 1 4
19 42 1 4
20 42 1 4
21 42 1 4
22 42 1 4
23 42 1 4
19 42 1 4
24 42 1 4
Vertices: 25 Arestas: 29

I can’t figure out the problem because there is no standard in the output.
Thank you very much.

SOLVED: I found the problem, I was recording the wrong variable.

while (!in_file.eof()) {
    getline(in_file, buffer);
    stringstream ss(buffer);
    parametro = 0;
    while (getline(ss, buffer, ';')) {
        stringstream aux(buffer);
        if (parametro == 0) {
            aux >> vertice;
        }
        if (parametro == 1) {
            aux >> x;
        }
        if (parametro == 2) {
            aux >> y;
        }
        if (parametro == 3) {
            aux >> tipo;
        }
        parametro++;
    }
    cout << vertice << " " << x << " " << y << " " << tipo << endl;
}
  • Welcome to Stackoverflow in Portuguese. As the name implies, the Official language used here is English. So, can you Please Translate your Question? If you prefer, you may also Ask this same Question in the English Stackoverflow site.

  • @Andersoncarloswoss already translated, I’m sorry.

  • 1

    @Lucasduete Sorry Lucas, I thought it was in English. I have translated my question. Thank you !

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.