estructuras de controlgecousb.com.ve/guias/geco/computo científico 1 (co-2111... · 2015. 4....

27
Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras de control Funciones fopen y fclose Estas funciones sirven para abrir y cerrar archivos, respectivamente. La función fopen tiene la forma: [ fi, texto ] = fopen( nom_archivo, c) donde fi es una variable que recibe el valor de retorno que identifica A continuación veremos funciones para lectura y escritura de archivos. Prof. Saúl. Buitrago y Oswaldo Jiménez donde fi es una variable que recibe el valor de retorno que identifica al archivo de nombre nom_archivo, texto es un mensaje para el caso de que se produzca un error, y c es un carácter (o dos) que indica el tipo de operación que se desea realizar con el archivo. Las opciones más importantes para c son las siguientes: 'r' lectura (de read) 'w' escritura reemplazando (de write) 'a' escritura a continuación (de append) 'r+' lectura y escritura

Upload: others

Post on 21-Feb-2021

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Instrucciones de entrada (lectura) y de salida (escritura) (cont.)

Estructuras de control

Funciones fopen y fclose

Estas funciones sirven para abrir y cerrar archivos, respectivamente.

La función fopen tiene la forma:

[ fi, texto ] = fopen( nom_archivo, c)

donde fi es una variable que recibe el valor de retorno que identifica

A continuación veremos funciones para lectura y escritura de archivos.

Prof. Saúl. Buitrago y Oswaldo Jiménez

donde fi es una variable que recibe el valor de retorno que identifica al archivo de nombre nom_archivo, texto es un mensaje para el caso de que se produzca un error, y c es un carácter (o dos) que indica el tipo de operación que se desea realizar con el archivo. Las opciones más importantes para c son las siguientes:

'r' lectura (de read)

'w' escritura reemplazando (de write)

'a' escritura a continuación (de append)

'r+' lectura y escritura

Page 2: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Instrucciones de entrada (lectura) y de salida (escritura) (cont.)

Estructuras de control

Funciones fopen y fclose (cont.)

Cuando por alguna razón el archivo no puede ser abierto, se devuelve un -1 en la variable fi . En este caso el valor de retorno texto puede proporcionar información sobre el tipo de error que se ha producido.

Después de realizar las operaciones de lectura y escritura deseadas,

Prof. Saúl. Buitrago y Oswaldo Jiménez

el archivo se puede cerrar con la función fclose en la forma siguiente:st = fclose( fi )

donde st es un valor de retorno para posibles condiciones de error,(cuando st retorna como 0 significa que el archivo cerró bien).Si se quieren cerrar a la vez todos los archivos abiertos puede utilizarse el comando:

st = fclose( 'all' )

Page 3: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Instrucciones de entrada (lectura) y de salida (escritura) (cont.)

Estructuras de control

Funciones fscanf y fprintf

Estas funciones permiten leer y escribir en archivos ascii, es decir, en archivos de texto plano.Forma general de la función fscanf:

[ var, count ] = fscanf( fi, format, size )Lee del archivo identificado por fi de acuerdo a un formato especificado por format y lo devuelve en la variable var (real, vector o matriz).

Prof. Saúl. Buitrago y Oswaldo Jiménez

N lee a lo más N elementos en un vector columnainf lee hasta el final del archivo[M,N] lee a lo más M * N elementos llenando al menos una matriz M×N siguiendo el orden de columnas. N puede ser inf, pero no M.

count (opcional) devuelve el número de elementos leídos satisfactoriamente. size (opcional) limita el número de elementos a ser leidos en el archivo Si no se coloca, lee hasta el final del archivo. Si se especifica, se tienen las siguientes opciones

Page 4: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Instrucciones de entrada (lectura) y de salida (escritura) (cont.)

Estructuras de control

Funciones fscanf y fprintf (cont.)

format va encerrada entre comillas simples, y contiene los especificadores de formato para las variables

%s para cadenas de caracteres%d para variables enteras%f para variables de punto flotante%c para un caracter

Prof. Saúl. Buitrago y Oswaldo Jiménez

Ejemplos :

Considérese el archivo de texto plano de nombre entrada1.txt, mostrado en la figura.

Veamos varias posibilidades de lectura sobre este archivo:

1) >> fi1 = fopen('entrada1.txt', 'r');>> s = fscanf( fi1, '%s');>> fclose(fi1);

Lee todo el contenido del archivo como una cadena de caracteres, quitando los espacios en blanco. El resultado ess = '1001200324512aab678910201'

Page 5: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Instrucciones de entrada (lectura) y de salida (escritura) (cont.)

Estructuras de control

Funciones fscanf y fprintf (cont.)

2) >> fi2 = fopen('entrada1.txt', 'r');>> s = fscanf( fi2, '%d');>> fclose(fi2);

Lee enteros mientras sea posible. Por ejemplo, cuando se consigue la cadena 'aab', la misma no puede ser leída como un entero, de modo que el último entero leído es 512. Nótese que el arreglo resultante es

Prof. Saúl. Buitrago y Oswaldo Jiménez

que el último entero leído es 512. Nótese que el arreglo resultante es columna, esto es:

s = [ 1001200324

512 ]

3) >> fi3 = fopen('entrada1.txt', 'r');>> s = fscanf( fi3, '%d',1);>> fclose(fi3);

Lee sólo un entero. Así, s = 1001

Page 6: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Instrucciones de entrada (lectura) y de salida (escritura) (cont.)

Estructuras de control

Funciones fscanf y fprintf (cont.)

La lectura mediante fscanf es secuencial sobre los archivos de texto plano, de manera que es posible leer todos los datos contenidos en éste, si se conoce previamente la estructura del archivo. Por ejemplo:

4) >> fi4 = fopen('entrada1.txt', 'r');

Prof. Saúl. Buitrago y Oswaldo Jiménez

4) >> fi4 = fopen('entrada1.txt', 'r');>> s = fscanf( fi4, '%d',5);>> t = fscanf( fi4, '%s',1);>> u = fscanf( fi4, '%d');>> fclose(fi4);

Lee los primeros cinco enteros, los cuales son almacenados en el vector columna

s = [ 1001 ; 200 ; 32 ; 4 ; 512 ]

Lee una cadena de caracteres que queda almacenada en la variable t, por lo cual

t = 'aab'

Lee los enteros que están después de la cadena 'aab' hasta el final del archivo. El resultado es el vector columna

u = [ 6 ; 7 ; 8 ; 9 ; 10201 ]

Page 7: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Instrucciones de entrada (lectura) y de salida (escritura) (cont.)

Estructuras de control

Funciones fscanf y fprintf (cont.)

Supongamos ahora que se quieren leer varias matrices desde un archivo de texto plano de nombre "matrices.txt" a fin de mostrarlas en pantalla. En el mismo archivo está contenida la información de cuántas matrices se van a leer y, para cada una de ellas, se especifica nombre, dimensiones y los elementos que la componen. A continuación se muestra un ejemplo de un tal archivo:

Prof. Saúl. Buitrago y Oswaldo Jiménez

de un tal archivo:

cantidad de matrices a ser leídas

dimensiones de las matrices

Page 8: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Instrucciones de entrada (lectura) y de salida (escritura) (cont.)

Estructuras de control

Funciones fscanf y fprintf (cont.)

En el siguiente código, se lee la información contenida en el archivo "matrices.txt" y se muestran en la pantalla las matrices leídas.

% Se abre el archivo 'matrices.txt' para lecturafid = fopen('matrices.txt','r');

% Se verifica si el archivo se abrió correctamenteif fid == -1

disp('No se pudo abrir el archivo matrices.txt');return

Prof. Saúl. Buitrago y Oswaldo Jiménez

returnend

nmat = fscanf(fid,'%d',1); % Cantidad de matrices a ser leídas

for k = 1 : nmat % para cada matriz se lee ...nombre_matriz = fscanf(fid,'%s',1); % ... nombrenfil = fscanf(fid,'%d',1); % ... cantidad de filasncol = fscanf(fid,'%d',1); % ... cantidad de columnasmatriz = fscanf(fid,'%d',[ncol,nfil]); % ... elementosmatriz = matriz';% Se imprime la matriz por pantalladisp(matriz);

endfclose(fid);

Page 9: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Instrucciones de entrada (lectura) y de salida (escritura) (cont.)

Estructuras de control

Funciones fscanf y fprintf (cont.)

Es importante destacar la forma en la que se lee cada matriz:

* Para leer la matriz completa, se especifica, como tercer parámetro

de la función fscanf, al vector [ncol,nfil]; esto es, la matriz se lee

por filas.

matriz = fscanf(fid,'%d',[ncol,nfil]);

Prof. Saúl. Buitrago y Oswaldo Jiménez

matriz = fscanf(fid,'%d',[ncol,nfil]);

* Como cada fila leída se almacena por columnas, la matriz

resultante de la lectura es, en realidad, la traspuesta de la matriz

dada en el archivo. Por lo tanto, es necesario trasponer la matriz

resultante de la lectura.

matriz = matriz';

Siempre se deben ejecutar estos dos pasos para leer una matriz Siempre se deben ejecutar estos dos pasos para leer una matriz completa desde un archivo de texto plano.completa desde un archivo de texto plano.

Page 10: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Instrucciones de entrada (lectura) y de salida (escritura) (cont.)

Estructuras de control

Funciones fscanf y fprintf (cont.)

Existe una alternativa para leer una matriz desde un archivo de texto

plano, aunque es menos eficiente que la lectura de la matriz completa

mediante el procedimiento explicado en la lámina anterior. Consiste en

leer la matriz fila por fila en un cicloleer la matriz fila por fila en un ciclo. Así, la lectura de las matrices

contenidas en el archivo "matrices.txt" dado anteriormente, se vería

Prof. Saúl. Buitrago y Oswaldo Jiménez

contenidas en el archivo "matrices.txt" dado anteriormente, se vería

como se muestran en el siguiente código:

Page 11: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Instrucciones de entrada (lectura) y de salida (escritura) (cont.)

Funciones fscanf y fprintf (cont.)% Se abre el archivo 'matrices.txt' para lecturafid = fopen('matrices.txt','r');

% Se verifica si el archivo se abrió correctamenteif fid == -1

disp('No se pudo abrir el archivo matrices.txt');return

end

nmat = fscanf(fid,'%d',1); % Cantidad de matrices a ser leídas

Prof. Saúl. Buitrago y Oswaldo Jiménez

nmat = fscanf(fid,'%d',1); % Cantidad de matrices a ser leídas

for k = 1 : nmat % para cada matriz se lee ...nombre_matriz = fscanf(fid,'%s',1); % ... nombrenfil = fscanf(fid,'%d',1); % ... cantidad de filasncol = fscanf(fid,'%d',1); % ... cantidad de columnasmatriz = [ ]; % 'sine qua non'for i = 1 : nfil

matriz(i,:) = fscanf(fid,'%d',ncol);end% Se imprime la matriz por pantalladisp(matriz);

endfclose(fid);

Para que esta técnica funcione, es imperativo inicializar la variable 'matriz''matriz' cada vez que se vaya a leer una nueva matriz desde el archivo. Esto se debe básicamente al hecho de que se está usando una misma variable para almacenar todas las matrices leídas.

Page 12: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Instrucciones de entrada (lectura) y de salida (escritura) (cont.)

Funciones fscanf y fprintf (cont.)

Todavía se puede escribir una tercera versión de este programa, considerando el hecho de que el tamaño de la matriz consiste de dos números enteros (número de filas y de columnas) que pueden ser leídos simultáneamente :

% Se abre el archivo 'matrices.txt' para lecturafid = fopen('matrices.txt','r');

...

for k = 1 : nmat

Prof. Saúl. Buitrago y Oswaldo Jiménez

fid = fopen('matrices.txt','r');

% Se verifica si el archivo se abrió correctamenteif fid == -1

disp('No se pudo abrir el archivo matrices.txt');return

end

nmat = fscanf(fid,'%d',1); % Cantidad de matrices% a ser leídas

...

for k = 1 : nmatnombre_matriz = fscanf(fid,'%s',1); tam = fscanf(fid,'%d',2);nfil = tam(1); ncol = tam(2);matriz = [ ];for i = 1 : nfil

matriz(i,:) = fscanf(fid,'%d',ncol);end% Se imprime la matriz por pantalladisp(matriz);

endfclose(fid);

Page 13: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Instrucciones de entrada (lectura) y de salida (escritura) (cont.)

Estructuras de control

Funciones fscanf y fprintf (cont.)

Forma general de la función fprintf:count = fprintf( fi, format, var, … )

Dirige su salida formateada hacia el archivo indicado por el identificador fi , format contiene los formatos de escritura y count retorna el número de bytes escritos satisfactoriamente. Después del formato habrá una lista de variables y/o valores que deben concordar, una a una, en cantidad y

Prof. Saúl. Buitrago y Oswaldo Jiménez

>> fi1 = fopen(‘salida1’, ‘w’);>> count = fprintf( fi1, ‘el número de ecuaciones es %d \n’, n);

→ escribe el texto entre comillas y el valor de la variable n según el formato indicado (número entero en este caso)

>> fi2 = fopen(‘salida2’, ‘w’);>> count = fprintf( fi2, ‘el determinante es %10.4f \n’, n);

en tipo con los especificadores de conversión que aparezcan en el formato, los cuales se identifican por el uso del caracter %.

Ejemplos :

Page 14: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Instrucciones de entrada (lectura) y de salida (escritura) (cont.)

Estructuras de control

Funciones fscanf y fprintf (cont.)

Obs . El uso de \n para saltar líneas en un archivo de texto plano, no se ve reflejado al abrir el archivo con la aplicación bloc de notas (notepad) de Windows. Es decir, al abrir el archivo, la impresión visual es que no hay saltos de línea en absoluto. Esto se resuelve usando la secuencia \r\n en el formato para fprintf, en lugar de usar sólo \n.

Obs . \n en el formato obliga a crear una línea nueva en el archivo de texto.

Prof. Saúl. Buitrago y Oswaldo Jiménez

sólo \n.

Obs . Aunque se podría creer que \n es una cadena de dos caracteres cuando aparece en un formato de impresión, en realidad es uncaracter especial no imprimible que sgnifica "nueva línea" (new line). De la misma manera, \r es un caracter especial no imprimible que significa "salto de línea" (carriage return) cuando aparece en un formato de impresión. De hecho, los códigos ascii de estos caracteres especiales son 10 para \n y 13 para \r. Por lo tanto, una expresión como fprintf(fid,'\r\n'); es totalmente equivalente a esta otra fprintf(fid,'%c%c',char(13),char(10)); Haga el ejercicio de verificarlo.

Page 15: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Instrucciones de entrada (lectura) y de salida (escritura) (cont.)

Estructuras de control

Funciones fscanf y fprintf (cont.)

Obs . A los caracteres especiales no imprimibles, tales como \r y \n, también se les conoce como caracteres de "escape" (escape characters). Otros caracteres de escape no imprimibles son

\b (backspace, código ascii 8), \t (horizontal tab, código ascii 9),\f (form feed, código ascii 12).

Existen caracteres de escape imprimibles, básicamente destinados a incluir en la impresión aquellos caracteres que tienen significado

Prof. Saúl. Buitrago y Oswaldo Jiménez

Obs . La función fprintf de Matlab se puede usar para imprimir mensajes en la pantalla del computador. Para ello, basta omitir el parámetro referido al número de identificación de archivo (primer parámetro). Los demás parámetros, esto es, el formato y la lista eventual de variables y/o valores asociados a los especificadores de conversión, se manejan de la misma manera que en el caso de impresión en archivos.

incluir en la impresión aquellos caracteres que tienen significado especial dentro del formato. Por ejemplo, para imprimir la comilla simple en un formato, se debe usar '' (i.e. dos veces la comilla simple); asimismo, %% permite imprimir el caracter % en un formato. Consulte la ayuda de fprintf para obtener más información.

Page 16: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Leer un conjunto de matrices de un archivo, determinar cuales son DD y cuales no, y las escribe en un archivo con el resultado.Archivo de entrada: datos_matrices_DD.txtArchivo de salida: salida_matrices_DD.txtScript: lectura_matrices_DD.m

Estructuras de control

Ejemplo :

Definición :Una matriz A de orden n×n es diagonal dominante estricta si

n

Prof. Saúl. Buitrago y Oswaldo Jiménez

niaan

ijj

ijii ≤≤> ∑≠=

1,,1

La matriz

506

135

027

+>−

−+>

+>

−−=650

153

027

A es diagonal dominante estricta, ya que

Page 17: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Estructuras de control

Ejemplo :

Archivo de entrada:

datos_matrices_DD.txt

número de matrices dimensiones

de las matrices

Prof. Saúl. Buitrago y Oswaldo Jiménez

Page 18: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Estructuras de controlEjemplo :

Nótese la traspuesta

Impresión en pantalla

Prof. Saúl. Buitrago y Oswaldo Jiménez

Nótese la traspuesta

Saltos de línea para Notepad

Page 19: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Cadena de caracteres y archivos

Estructuras de datos

Ejercicio : Dada una cadena de caracteres, la cual representa a un número hexadecimal (es decir, en base 16), hallar el correspondiente valor en base 10. Se plantea que los números hexadecimales a ser convertidos a base 10 se lean desde un archivo de texto plano, de modo que cada número esté en una línea del archivo . En este caso es estrictamente necesario manejar el dato de entrada como una cadena de caracteres porque en base 16 se utilizan dígitos representados por letras (los dígitos en base 16 son 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,

Prof. Saúl. Buitrago y Oswaldo Jiménez

representados por letras (los dígitos en base 16 son 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F).

Se propone crear un script en Matlab que lleve a cabo esta tarea. Se espera que el programa verifique exhaustivamente la pertinencia de los datos que sean leídos desde el archivo de texto plano.El manejo de los códigos ascii previsto en Matlab facilita enormemente la resolución de este problema. Se les sugiere resolver primero el problema desde el punto de vista lógico, escribiendo (en el papel) un algoritmo en lenguaje natural, que luego trasladarán al lenguaje de Matlab.

archivo : hexadecimal_a_decimal.m

Page 20: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Instrucción de lectura “textread”

Estructuras de control

Lee datos numéricos (sin formato) o heterogéneos (con formato) de un archivo de texto (ascii)

Sintaxis sin usar formato:

a = textread(archivo)

a = textread(archivo, ‘ ', n)

a = textread(archivo, ‘ ', param, valor, ...)

a = textread(archivo, ‘ ', n, param, valor, ...)

Prof. Saúl. Buitrago y Oswaldo Jiménez

a = textread(archivo, ‘ ', n, param, valor, ...)

Lee n líneas de archivo y las almacena en la variable a. Se supone que archivo contiene sólo datos numéricos.

Opciones para param

• 'delimiter': identifica el caracter de separación entre los datos

• 'headerlines': número de líneas de cabecera del archivo, estas líneas son ignoradas en la lectura

• 'commentstyle‘: con valor 'matlab‘, indica que los caracteres después de % son ignorados

Page 21: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Estructuras de control

>> a = textread('datos2.csv ', ' ', 'delimiter', ',')

Ejemplos:

>> a = textread('datos1.txt ')

→ lee todas las líneas del archivo

>> a = textread('datos1.txt ', ' ', 1)

→ lee la primera línea del archivo

Instrucción de lectura “textread” (cont.)

Prof. Saúl. Buitrago y Oswaldo Jiménez

>> a = textread('datos2.csv ', ' ', 'delimiter', ',')

→ lee todas las líneas del archivo

>> a = textread('datos2.csv', ' ', 1, 'delimiter', ',')

→ lee la primera línea del archivo

>> a = textread('datos22.csv', ' ', 'delimiter', ',', 'headerlines', 1)

→ lee todas las líneas del archivo después del encabezado

>> a = textread('datos23.csv', ' ', 'delimiter', ',', 'headerlines', 1, 'commentstyle', 'matlab') → lee todas las líneas del archivo después del encabezado, ignorando las comentadas

Page 22: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Estructuras de control

Sintaxis usando formato:

[a, b, c, …] = textread(archivo, formato)

[a, b, c, …] = textread(archivo, formato, n)

[a, b, c, …] = textread(archivo, formato, param, valor, ...)

[a, b, c, …] = textread(archivo, formato, n, param, valor, ...)

Lee n líneas de archivo con formato especificado y las almacena en las variables a, b, c, etc., respectivamente. Los datos en archivo

Instrucción de lectura “textread” (cont.)

Prof. Saúl. Buitrago y Oswaldo Jiménez

las variables a, b, c, etc., respectivamente. Los datos en archivopueden ser heterogéneos (números y caracteres), pero se espera que estén organizados homogéneamente por columnas.

• El tipo de dato de cada columna se suministra en formato y corresponde a cada variable a, b, c, …

• Si n no se especifica o si es -1, lee el archivo completo, en caso contrario lee n líneas

Formatos:

%n : números reales o enteros

%d : números enteros

%f : números reales

%s : cadena de caracteres

%5c : 5 caracteres (incluye espacios en blanco)

Page 23: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Estructuras de control

Ejemplos:

>> [nombre, tipo, x, y, respuesta] = …

textread('datos.txt', '%s %s %f %d %s')

nombre = 'Sally''Joe''Bill'

tipo = 'Type1''Type2''Type1'

x =12.340023.540034.9000

y =45

→ lee todas las líneas del archivo, según el formato especificado y las almacena en las variables indicadas

Instrucción de lectura “textread” (cont.)

Prof. Saúl. Buitrago y Oswaldo Jiménez

456012

respuesta = 'Si''No''No'

>> nombre = textread('datos.txt', '%s %*[^\n]')

→ lee la primera columna

nombre = 'Sally''Joe''Bill'

Page 24: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Instrucciones de lectura “textread” (cont.)

Estructuras de control

>> inicial = textread('datos.txt', '%c %*[^\n]')

→ lee el primer caracter inicial = SJB

>> x = textread('datos.txt', '%*s %*s %f %*d %*s')

Prof. Saúl. Buitrago y Oswaldo Jiménez

>> a = textread('datos.txt', '%s', 'delimiter', '\n') → cada línea como cadena de caracteres

→ lee la tercera columna x =12.340023.540034.9000

a = 'Sally Type1 12.34 45 Si''Joe Type2 23.54 60 No''Bill Type1 34.90 12 No'

Page 25: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Estructuras de datos

Arreglos de cadenas de caracteres

Un arreglo de cadena de caracteres es como un vector cuyos elementos son cadenas de caracteres. Este puede ser creado usando llaves, así

>> s1 = {‘hola’ ‘si’ ‘adios’} →>> ss = {'saul' 'pedro' ; 'pepe' 'maria'}

Si construimos la cadena de caracteres concatenados verticalmente

ss ='saul' 'pedro‘'pepe' 'maria'

s1 = 'hola' 'si' 'adios'

Prof. Saúl. Buitrago y Oswaldo Jiménez

Se tiene que s1 y s2 son diferentes, pero se puede pasar de un tipo al otro usando las funciones “char” y “cellstr”.

Además existen las funciones “ischar” y “iscellstr” para identificar entre cada uno de ellos.

Si construimos la cadena de caracteres concatenados verticalmente

>> s2 = strvcat(‘hola', 'si', ‘adios')

La podemos interpretar como “arreglo de cadena de caracteres”, pero no es tal.

Page 26: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Instrucciones de lectura “textread” (cont.)

Estructuras de control

>> nombre

nombre = 'Sally''Joe''Bill'

Dado el arreglo de cadena de caracteres nombre:

Podemos agregar una cadena de caracteres a este arreglo:

Prof. Saúl. Buitrago y Oswaldo Jiménez

>> nombre = cellstr(strvcat(char(nombre),‘Pedro'))→ agrega al arreglo de cadena de caracteres ‘nombre’ el elemento ‘Pedro’

nombre = 'Sally''Joe''Bill'‘Pedro'

>> size(nombre) → ans = 4 1

Page 27: Estructuras de controlgecousb.com.ve/guias/GECO/Computo Científico 1 (CO-2111... · 2015. 4. 21. · Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Estructuras

Instrucción de lectura “load”

Estructuras de control

Lee el contenido de un “archivo” y lo deposita en un arreglo con nombre “archivo”.

>> load datos1.txt

→ almacena el contenido en la variable datos1

la instrucción es equivalente a load –ascii datos1.txt

>> s = load(‘datos1.txt’)

→ almacena el contenido en la variable s

Prof. Saúl. Buitrago y Oswaldo Jiménez

→ almacena el contenido en la variable s

>> var = ‘datos1.txt’; s = load(var) → almacena en la variable s

Obs:• El archivo puede tener cualquier extensión diferente a “.mat”, el

archivo es tratado como ascii• Es importante que todas las filas tengan el mismo número de

columnas• Las separaciones entre elementos: blancos o comas (,)• El archivo debe tener sólo números