fscanf ().Прочитать файл с рисунком в C - PullRequest
0 голосов
/ 22 мая 2018

Я должен прочитать текстовый файл, используя scanf и показать в консоли содержимое.Это необходимо сделать с scanf.Также # строки должны быть опущены на выходе.

У меня есть следующий текстовый файл:

# Lista ciudades

Coruña, Vigo, Valladolid, Oviedo, Bilbao, Zaragoza, Gerona, Barcelona, Madrid, Badajoz, Albacete, Valencia, Murcia, Jaén, Sevilla, Granada, Cádiz


# Distancias entre ciudades

Coruña Vigo 171
Coruña Valladolid 455
Vigo Valladolid 356
Valladolid Bilbao 280
Valladolid Madrid 193
Oviedo Bilbao 304
Bilbao Madrid 395
Bilbao Zaragoza 324
Madrid Zaragoza 325
Zaragoza Barcelona 296
Barcelona Gerona 100
Valencia Barcelona 349
Madrid Badajoz 403
Madrid Jaén 335
Madrid Albacete 251
Albacete Valencia 191
Albacete Murcia 150
Murcia Granada 284
Murcia Valencia 241
Granada Jaén 99
Granada Sevilla 256
Jaén Sevilla 242
Sevilla Cádiz 125

Желаемый вывод:

Coruña Vigo Valladolid Oviedo Bilbao Zaragoza Gerona Barcelona Madrid Badajoz Albacete Valencia Murcia Jaén Sevilla Granada Cádiz

Coruña Vigo 171
Coruña Valladolid 455
Vigo Valladolid 356
Valladolid Bilbao 280
Valladolid Madrid 193
Oviedo Bilbao 304
Bilbao Madrid 395
Bilbao Zaragoza 324
Madrid Zaragoza 325
Zaragoza Barcelona 296
Barcelona Gerona 100
Valencia Barcelona 349
Madrid Badajoz 403
Madrid Jaén 335
Madrid Albacete 251
Albacete Valencia 191
Albacete Murcia 150
Murcia Granada 284
Murcia Valencia 241
Granada Jaén 99
Granada Sevilla 256
Jaén Sevilla 242
Sevilla Cádiz 125

Для достижения этого,Я думал о чем-то вроде:

contadorAlmoadillas = 0;
if ((fichero = fopen("./files/carreteras.txt", "r")) != NULL) {
    // If contadorAlmoadillas is 1
    while (fscanf(fichero, " %[^,]",buffer) != NULL) {
        printf("%s ", buffer);
    }
    // If contadorAlmoadillas is 2
    while (fscanf(fichero, " %[^ ], %[^ ], %[^\n]",buffer1,buffer2,&d) != NULL) {
        printf("%s %s %i \n", buffer1,buffer2,d);
    }
    fclose(fichero);
}

Но я не получаю желаемого результата.Это связано с шаблоном scanf.

Кроме того, теперь я знаю, как подсчитать, сколько раз появляется # символ, поэтому я не могу реализовать оператор if.

Есть идеи, как мне это сделать?

Спасибо.

1 Ответ

0 голосов
/ 23 мая 2018

Я достиг своей цели.Я получил это как:

// WAY 1
            int contadorAlmoadillas = 0;
            int contadorCamposLinea = 0;

            if ((fichero = fopen("./files/carreteras.txt", "r")) != NULL) {
                while (fscanf(fichero, " %[^,\n ]%*c",buffer) != EOF) {
                    G:
                    if (buffer[0] == '#') {
                        fscanf(fichero, " %[^\n]",buffer);
                        printf("\n\n\n# %s \n\n", buffer); // CABECERA
                        contadorAlmoadillas++;
                    } else {
                        // # Lista ciudades
                        if (contadorAlmoadillas == 1) {
                            printf("%s ", buffer); // CIUDAD
                        // # Distancias entre ciudades
                        } else if (contadorAlmoadillas == 2) {
                            if (contadorCamposLinea < 3) {
                                printf("%s ", buffer); // NODO1 Y NODO2 Y PESO
                                contadorCamposLinea++;
                            } else {
                                printf("\n");
                                contadorCamposLinea = 0;
                                goto G;
                            }
                        }
                    }
                }

                printf("\n\n\n");
                fclose(fichero);
            }

// WAY 2
            int contadorAlmoadillas = 0;
            int contadorCamposLinea = 0;

            if ((fichero = fopen("./files/carreteras.txt", "r")) != NULL) {
                while (fscanf(fichero, " %[^,\n ]%*c",buffer) != EOF) {
                    if (buffer[0] == '#') {
                        fscanf(fichero, " %[^\n]",buffer);
                        printf("\n\n\n# %s \n\n", buffer); // CABECERA
                        contadorAlmoadillas++;
                    } else {
                        // # Lista ciudades
                        if (contadorAlmoadillas == 1) {
                            printf("%s ", buffer); // CIUDAD
                        // # Distancias entre ciudades
                        } else if (contadorAlmoadillas == 2) {
                            if (contadorCamposLinea < 2) {
                                printf("%s ", buffer); // NODO1 Y NODO2
                                contadorCamposLinea++;
                            } else {
                                printf("%s\n", buffer); // PESO
                                contadorCamposLinea = 0;
                            }
                        }
                    }
                }
                fclose(fichero);
            }

Оба пути равны, один использует TAG, а другой избегает этого.Я надеюсь, что это может быть полезно для кого-либо еще.

С уважением.

...