Main Content

fscanf

Leer los datos de un archivo de texto

Descripción

ejemplo

A = fscanf(fileID,formatSpec) lee los datos de un archivo de texto abierto a un vector columna A e interpreta valores en el 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 al final del marcador de fin de archivo. Si la función fscanf no puede hacer coincidir formatSpec con los datos, entonces solo lee la porción que coincide y deja de procesar.

El archivo de texto está indicado por el identificador de archivo, fileID. Use fopen para abrir el archivo, especifique la codificación de caracteres y obtenga el valor fileID. Cierre el archivo llamando a fclose(fileID) cuando finalice la lectura.

ejemplo

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

ejemplo

[A,count] = fscanf(___) además devuelve el número de campos que fscanf lee en A. Para 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 muestra que contenga números de punto flotante.

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

Visualice 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 lectura y obtenga el identificador del archivo fileID.

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

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

formatSpec = '%f';

Lea los datos del archivo rellenando el arreglo 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 columna que contiene datos del archivo.

Cierre el archivo.

fclose(fileID);

Cree un archivo de texto de muestra que contenga valores enteros y números de 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);

Visualice 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 lectura y obtenga el identificador del archivo fileID.

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

Defina el formato de los datos para leer y la forma del arreglo de salida.

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

Lea los datos del archivo rellenando el arreglo de salida A por orden de columna. fscanf vuelve a utilizar 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);

Trasponga el arreglo de modo que A coincida con la orientación de los datos en el 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

Omita caracteres específicos en el archivo de muestra y devuelva solo los datos numéricos.

Cree un archivo de texto de muestra 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 en el archivo omitiendo el texto, °C. Devuelva también el número de valores que lee fscanf. El código ampliado ASCII 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 en el archivo. count indica que fscanf lee cinco valores.

Argumentos de entrada

contraer todo

Identificador de archivo de un archivo de texto abierto, especificado como valor entero. Antes de leer un archivo con fscanf, deberá usar fopen para abrir el archivo y obtener su fileID.

Tipos de datos: double

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

Campos numéricos

Esta tabla enumera conversiones disponibles para entradas numéricas. fscanf convierte los valores a su representación numérica 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 10.

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

  • Si el dígito inicial es 0, entonces 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 de punto flotante

%f

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

%e

%g

Campos de caracteres

Esta tabla enumera especificadores de conversión disponibles para entradas de caracteres.

Tipo de campo de caracteresEspecificador de conversiónDescripción

Vector de caracteres o escalar de cadena

%s

Leer todos los caracteres excepto los espacios en blanco.

%c

Leer cualquier carácter individual, incluido un espacio en blanco.
Para leer múltiples caracteres a la vez, debe especificar el ancho de campo.

Coincidencia de patrón

%[...]

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

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

Si formatSpec contiene una combinación de especificadores numéricos y de caracteres, entonces fscanf convierte cada carácter a su equivalente numérico. Esta conversión tiene lugar incluso si 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 caracteres de su archivo en secuencia, a menos que indique que debe ignorar algún campo en concreto o una parte de un campo. Para omitir campos, inserte un asterisco (*) después del signo de porcentaje (%). Por ejemplo, para omitir valores enteros, especifique %*d.

  • Anchura de campo

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

  • Texto literal que ignorar

    fscanf ignora el texto especificado y añadido al especificador de conversión formatSpec.

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

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

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

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

Argumentos de salida

contraer todo

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

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

    • Si formatSpec solo contiene especificadores de valor entero con signo de 64 bits, entonces A es de clase int64.

    • Si formatSpec solo contiene especificadores de valor entero sin signo de 64 bits, entonces A es de clase int64.

    • De lo contrario, A es de clase double.

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

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

  • Si MATLAB® no puede hacer coincidir los datos de archivo con formatSpec, entonces A puede ser numérico o un arreglo de caracteres. La clase de A depende de los valores que fscanf lee antes de parar de procesar.

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

Sugerencias

  • Los especificadores de formato para las funciones de lectura sscanf y fscanf difieren de los formatos para 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 escribir y un máximo para leer.

Algoritmos

MATLAB lee caracteres usando el esquema de cifrado asociado con el archivo. Usted especifica el cifrado cuando abre el archivo usando la función fopen.

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a

expandir todo