Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

fscanf

Leer datos de archivo de texto

Descripción

ejemplo

A = fscanf(fileID,formatSpec) lee los datos de un archivo de texto abierto en el vector de columna A e interpreta los valores del archivo según el formato especificado por formatSpec. La función fscanf vuelve a aplicar el formato en todo el archivo y coloca el puntero del archivo en el marcador de fin de archivo. Si fscanf no puede hacer coincidir formatSpec con los datos, solo lee la parte que coincide y detiene el procesamiento.

El archivo de texto se indica mediante el identificador de archivo, fileID. Utilice fopen para abrir el archivo, especifique la codificación de caracteres y obtenga el valor de fileID. Cuando finalice la lectura, cierre el archivo llamando a fclose(fileID).

ejemplo

A = fscanf(fileID,formatSpec,sizeA) lee los datos de archivo en un array, A, con dimensiones, sizeA, y coloca el puntero del archivo después del último valor leído. fscanf rellena A por orden de columna. sizeA debe ser un entero positivo o tener la forma [m n], donde m y n son enteros positivos.

ejemplo

[A,count] = fscanf(___) devuelve además el número de campos que fscanf lee en A. Para los datos numéricos, este es el número de valores leídos. Puede utilizar esta sintaxis con cualquiera de los argumentos de entrada de las sintaxis anteriores.

Ejemplos

contraer todo

Cree un archivo de texto de ejemplo que contenga números en punto flotante.

x = 100*rand(8,1);
fileID = fopen('nums1.txt','w');
fprintf(fileID,'%4.4f\n',x);
fclose(fileID);

Vea el contenido del archivo.

type nums1.txt
81.4724
90.5792
12.6987
91.3376
63.2359
9.7540
27.8498
54.6882

Abra el archivo para su lectura y obtenga el identificador de archivo, fileID.

fileID = fopen('nums1.txt','r');

Defina el formato de los datos que se leerán. Utilice '%f' para especificar los números en punto flotante.

formatSpec = '%f';

Lea los datos del archivo, rellenando el array de salida, A, por orden de columna. fscanf vuelve a aplicar el formato, formatSpec, en todo el archivo.

A = fscanf(fileID,formatSpec)
A = 8×1

   81.4724
   90.5792
   12.6987
   91.3376
   63.2359
    9.7540
   27.8498
   54.6882

A es un vector de columna que contiene datos del archivo.

Cierre el archivo.

fclose(fileID);

Cree un archivo de texto de ejemplo que contenga enteros y números en punto flotante.

x = 1:1:5;
y = [x;rand(1,5)];
fileID = fopen('nums2.txt','w');
fprintf(fileID,'%d %4.4f\n',y);
fclose(fileID);

Vea el contenido del archivo.

type nums2.txt
1 0.8147
2 0.9058
3 0.1270
4 0.9134
5 0.6324

Abra el archivo para su lectura y obtenga el identificador de archivo, fileID.

fileID = fopen('nums2.txt','r');

Defina el formato de los datos que se leerán y la forma del array de salida.

formatSpec = '%d %f';
sizeA = [2 Inf];

Lea los datos del archivo, rellenando el array de salida, A, por orden de columna. fscanf reutiliza el formato, formatSpec, en todo el archivo.

A = fscanf(fileID,formatSpec,sizeA)
A = 2×5

    1.0000    2.0000    3.0000    4.0000    5.0000
    0.8147    0.9058    0.1270    0.9134    0.6324

fclose(fileID);

Transponga el array de manera que A coincida con la orientación de los datos del archivo.

A = A'
A = 5×2

    1.0000    0.8147
    2.0000    0.9058
    3.0000    0.1270
    4.0000    0.9134
    5.0000    0.6324

Omitir caracteres específicos en un archivo de ejemplo y devolver solo datos numéricos.

Cree un archivo de texto de ejemplo que contenga valores de temperatura.

str = '78°C 72°C 64°C 66°C 49°C';
fileID = fopen('temperature.dat','w');
fprintf(fileID,'%s',str);
fclose(fileID);

Lea los números del archivo, omitiendo el texto, °C. También debe devolver el número de valores que lea fscanf. El código ASCII extendido 176 representa el signo de grado.

fileID = fopen('temperature.dat','r');
degrees = char(176);
[A,count] = fscanf(fileID, ['%d' degrees 'C'])
fclose(fileID);
A =

    78
    72
    64
    66
    49


count =

     5

A es un vector que contiene los valores numéricos del archivo. count indica que fscanf lee cinco valores.

Argumentos de entrada

contraer todo

Identificador de archivo de un archivo de texto abierto, especificado como un entero. Antes de leer un archivo con fscanf, debe utilizar fopen para abrir el archivo y obtener el fileID.

Tipos de datos: double

Formato de los campos de datos del archivo, especificado como vector de caracteres o escalar de cadena de uno o más especificadores de conversión. Cuando fscanf lee un archivo, intenta hacer coincidir los datos con el formato especificado por formatSpec.

Campos numéricos

Esta tabla muestra los especificadores de conversión disponibles para las entradas numéricas. fscanf convierte los valores a su representación decimal (base 10).

Tipo de campo numéricoEspecificador de conversiónDetalles

Entero, con signo

%d

Base 10

%i

Los valores del archivo determinan la base:

  • El valor predeterminado es base 10.

  • Si los dígitos iniciales son 0x o 0X, los valores son hexadecimales (base 16).

  • Si el dígito inicial es 0, los valores son octales (base 8).

%ld o %li

valores de 64 bits, base 10, 8 o 16

Entero, sin signo

%u

Base 10

%o

Base 8 (octal)

%x

Base 16 (hexadecimal)

%lu, %lo, %lx

valores de 64 bits, base 10, 8 o 16

Número en punto flotante

%f

Los campos en punto flotante pueden contener cualquiera de los siguientes elementos (no se distingue entre mayúsculas y minúsculas): Inf, -Inf, NaN o -NaN.

%e

%g

Campos de caracteres

Esta tabla muestra los especificadores de conversión disponibles para las entradas de caracteres.

Tipo de campo de caracteresEspecificador de conversiónDescripción

Vector de caracteres o escalar de cadena

%s

Leer todos los caracteres excluyendo los espacios en blanco.

%c

Lee cualquier carácter individual, incluyendo el espacio en blanco.
Para leer varios caracteres a la vez, especifique el ancho del campo.

Coincidencia de patrones

%[...]

Leer solo los caracteres entre corchetes hasta el primer carácter no coincidente o espacio en blanco.

Ejemplo: %[mus] lee 'summer ' como 'summ'.

Si formatSpec contiene una combinación de especificadores numéricos y de caracteres, fscanf convierte cada carácter en su equivalente numérico. Esta conversión se produce incluso cuando el formato omite explícitamente todos los valores numéricos (por ejemplo, formatSpec es '%*d %s').

Operadores opcionales

  • Campos y caracteres que ignorar

    fscanf lee todos los valores numéricos y los caracteres del archivo en secuencia, a menos que se le indique que ignore un campo concreto o una parte de un campo. Para omitir campos, inserte un asterisco (*) después del signo de porcentaje (%). Por ejemplo, para omitir los enteros, especifique %*d.

  • Ancho de campo

    Para especificar el número máximo de dígitos o caracteres de texto que se leerán a la vez, inserte un número después del carácter de porcentaje. Por ejemplo, %10c lee hasta 10 caracteres a la vez, incluidos los espacios en blanco. %4f lee hasta 4 dígitos a la vez, incluido el punto decimal.

  • Texto literal que ignorar

    fscanf omite el texto especificado anexado al especificador de conversión formatSpec.

    Ejemplo: Level%u lee 'Level1' como 1.

    Ejemplo: %uStep lee '2Step' como 2.

Dimensiones del array de salida, A, especificadas como Inf, un entero o un vector de fila de dos elementos.

Forma de la entrada sizeADescripción
InfLeer hasta el final del archivo.
Para los datos numéricos, la salida, A, es un vector de columna.
Para los datos de texto, A es un vector de caracteres.
nLeer como máximo n valores numéricos o campos de caracteres.
Para los datos numéricos, la salida, A, es un vector de columna.
Para los datos de texto, A es un vector de caracteres.
[m,n]Leer como máximo m*n valores numéricos o campos de caracteres. n puede ser Inf, pero m no puede. La salida, A, es m por n, rellenada por orden de columna.

Argumentos de salida

contraer todo

Datos de archivo, devueltos como vector de columna, matriz, vector de caracteres o array de caracteres. La clase y el tamaño de A dependen de la entrada formatSpec:

  • Si formatSpec solo contiene especificadores numéricos, A es numérico. Si especifica el argumento sizeA, A es una matriz del tamaño especificado. De lo contrario, A es un vector de columna. Si la entrada contiene menos de sizeA valores, fscanf rellena A con ceros.

    • Si formatSpec contiene solo especificadores enteros con signo de 64 bits, A es de la clase int64.

    • Si formatSpec contiene solo especificadores enteros sin signo de 64 bits, A es de la clase uint64.

    • De lo contrario, A es de la clase double.

  • Si formatSpec solo contiene especificadores de texto o caracteres (%c o %s), A es un array de caracteres. Si especifica sizeA y la entrada contiene menos caracteres, fscanf rellena A con char(0).

  • Si formatSpec contiene una combinación de especificadores numéricos y de caracteres, A es numérico, de la clase double y fscanf convierte cada carácter de texto a su equivalente numérico. Esto ocurre incluso cuando formatSpec omite explícitamente todos los campos numéricos (por ejemplo, formatSpec es '%*d %s').

  • Si MATLAB® no puede hacer coincidir los datos del archivo con formatSpec, A puede ser numérico o un array de caracteres. La clase de A depende de los valores que fscanf lea antes de que se detenga el procesamiento.

Número de caracteres leídos, devueltos como valor escalar.

Sugerencias

  • Los especificadores de formato para las funciones de lectura sscanf y fscanf difieren de los formatos de las funciones de escritura sprintf y fprintf. Las funciones de lectura no admiten un campo de precisión. El campo de anchura especifica un mínimo para la escritura y un máximo para la lectura.

Algoritmos

MATLAB lee los caracteres mediante el esquema de codificación asociado al archivo. Se especifica la codificación al abrir el archivo mediante la función fopen.

Introducido antes de R2006a