¿Cómo omitir una línea al escanear un archivo de texto?

2 minutos de lectura

avatar de usuario
NLed

Quiero escanear un archivo y omitir una línea de texto antes de leerlo. Lo intenté:

fscanf(pointer,"\n",&(*struct).test[i][j]);

Pero esta sintaxis simplemente comienza desde la primera línea.

avatar de usuario
Zac

Pude saltar líneas con scanf con la siguiente instrucción:

fscanf(config_file, "%*[^\n]\n");

La cadena de formato coincide con una línea que contiene cualquier carácter, incluidos los espacios. los * en la cadena de formato significa que no estamos interesados ​​en guardar la línea, sino solo en incrementar la posición del archivo.

Explicación de la cadena de formato:
% es el carácter con el que comienza cada cadena de formato scanf;
* indica que no se coloque el patrón encontrado en ninguna parte (por lo general, se guarda el patrón encontrado en los parámetros después de la cadena de formato, en este caso, el parámetro es NULL);
[^\n] significa cualquier carácter excepto nueva línea;
\n significa nueva línea;

entonces el [^\n]\n significa una línea de texto completo que termina en nueva línea.

Referencia aquí.

  • '\n' es un espacio en blanco, significa que se consume cualquier cantidad de cualquier espacio en blanco, no solo una nueva línea.

    – hyde

    28 oct 2019 a las 11:50


  • También se debe mencionar que la forma en que se implementa fscanf leerá la línea completa en la memoria y luego la liberará.

    – Jakub Nowak

    30 de marzo de 2021 a las 14:46

avatar de usuario
Torbellino

fgets obtendrá una línea y configurará el puntero del archivo comenzando en la siguiente línea. Luego, puede comenzar a leer lo que desee después de esa primera línea.

char buffer[100];
fgets(buffer, 100, pointer);

Funciona siempre que su primera línea tenga menos de 100 caracteres. De lo contrario, debe verificar y repetir.

avatar de usuario
Jack

No está claro en qué está tratando de almacenar sus datos, por lo que no es fácil adivinar una respuesta, por cierto, puede omitir bytes hasta que pase un \n:

FILE *in = fopen("file.txt", "r");

Entonces puede omitir una línea completa con fgets pero no es seguro (porque necesitará estimar la longitud de la línea a priori), de lo contrario, use fgetc:

char c;
do {
  c = fgetc(in);
} while (c != '\n');

Finalmente, debe tener especificadores de formato dentro de su fscanf para analizar datos, como

fscanf(in, "%f", floatVariable);

puedes referirte aquí para especificadores.

fgets trabajaría aquí.

#define MAX_LINE_LENGTH 80

char buf[MAX_LINE_LENGTH];

/* skip the first line (pFile is the pointer to your file handle): */
fgets(buf, MAX_LINE_LENGTH, pFile);

/* now you can read the rest of your formatted lines */

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad