Importacion y Exportacion de Datos
## Objetivos de Aprendizaje
- Importar datos de archivos
- Exportar datos a archivos
- Trabajar con diferentes formatos de archivo
- Manejar datos faltantes
## Archivos de Texto
### Leer Archivos de Texto
```matlab
% Leer archivo completo como texto
fid = fopen('data.txt', 'r');
text = fread(fid, '*char')';
fclose(fid);
```
### Leer con fscanf
```matlab
% Lectura formateada
fid = fopen('data.txt', 'r');
data = fscanf(fid, '%f %f %f', [3, inf]);
fclose(fid);
data = data'; % Transponer para obtener filas como registros
```
### Leer Linea por Linea
```matlab
fid = fopen('data.txt', 'r');
while ~feof(fid)
line = fgetl(fid);
disp(line)
end
fclose(fid);
```
## Archivos CSV
### Leer CSV
```matlab
% Lectura basica de CSV
data = readmatrix('data.csv');
% Con fila de encabezado
data = readmatrix('data.csv', 'NumHeaderLines', 1);
% Especificar rango
data = readmatrix('data.csv', 'Range', 'A2:D10');
```
### Leer con readtable
```matlab
% readtable devuelve una tabla
T = readtable('data.csv');
% Acceder por nombre de variable
T.Name
T.Age
T.Height
% Acceder por indice
T{1, :}
```
### Escribir CSV
```matlab
% Escribir matriz
M = [1, 2, 3; 4, 5, 6];
writematrix(M, 'output.csv');
% Escribir tabla
T = table(['Juan'; 'Juana'], [25; 30], [170; 165], ...
'VariableNames', {'Name', 'Age', 'Height'});
writetable(T, 'people.csv');
```
## Archivos Excel
### Leer Excel
```matlab
% Leer hoja completa
data = readmatrix('data.xlsx');
% Leer hoja especifica
data = readmatrix('data.xlsx', 'Sheet', 'Sheet2');
% Leer como tabla
T = readtable('data.xlsx');
```
### Escribir Excel
```matlab
% Escribir matriz
M = magic(5);
writematrix(M, 'magic.xlsx');
% Escribir tabla
writetable(T, 'output.xlsx');
% Agregar a archivo existente
writetable(T, 'existing.xlsx', 'WriteMode', 'append');
```
## Archivos Delimitados
### Opciones de readmatrix
```matlab
% Delimitado por tabulacion
data = readmatrix('data.txt', 'Delimiter', '\t');
% Delimitado por punto y coma
data = readmatrix('data.txt', 'Delimiter', ';');
% Con multiples delimitadores
data = readmatrix('data.txt', 'Delimiter', {',', ';', '\t'});
```
### Opciones de writematrix
```matlab
% Delimitado por tabulacion
writematrix(M, 'output.txt', 'Delimiter', '\t');
% Especificar precision
writematrix(M, 'output.txt', 'Precision', 4);
```
## Formato Nativo (.mat)
### Guardar Variables
```matlab
% Guardar todas las variables del espacio de trabajo
save('data.mat')
% Guardar variables especificas
save('data.mat', 'x', 'y', 'z')
% Guardar con compresion
save('data.mat', 'x', 'y', '-v7')
% Guardar sin compresion
save('data.mat', 'x', 'y', '-v6')
```
### Cargar Variables
```matlab
% Cargar todas las variables
load('data.mat')
% Cargar variables especificas
load('data.mat', 'x', 'y')
% Cargar a estructura
S = load('data.mat');
S.x
S.y
```
## Tablas
### Creando Tablas
```matlab
% From arrays
Age = [25, 30, 35]';
Height = [170, 165, 180]';
Name = {'Juan'; 'Juana'; 'Roberto'}';
T = table(Name, Age, Height);
```
### Operaciones con Tablas
```matlab
% Mostrar primeras filas
head(T)
% Mostrar ultimas filas
tail(T)
% Obtener resumen
summary(T)
% Agregar fila
T(end+1, :) = {'Miguel', 28, 175};
% Eliminar fila
T(2, :) = [];
```
### Indexacion de Tablas
```matlab
% Por indice de fila/columna
T{1, 2} % Edad de la primera persona
T{2, 'Name'} % Nombre de la segunda persona
T.Age % Columna edad como arreglo
T(:, {'Name', 'Age'}) % Columnas especificas
```
## Datos Faltantes
### Detectando Valores Faltantes
```matlab
% NaN en datos numericos
data = [1, NaN, 3, 4, NaN];
isnan(data) % [0, 1, 0, 0, 1]
any(isnan(data)) % true
```
### Manejando Valores Faltantes
```matlab
data = [1, NaN, 3, 4, NaN];
% Eliminar NaN
clean = data(~isnan(data)); % [1, 3, 4]
% Llenar NaN con valor
filled = fillmissing(data, 'constant', 0);
% Llenar con interpolacion
filled = fillmissing(data, 'linear');
% Llenar con valor anterior
filled = fillmissing(data, 'previous');
```
### Tabla con Datos Faltantes
```matlab
T = readtable('data.csv');
% Encontrar valores faltantes
ismissing(T)
% Eliminar filas con faltantes
T = rmmissing(T);
% Llenar faltantes
T = fillmissing(T, 'constant', 0);
```
## E/S de Archivos de Bajo Nivel
### Modos de Apertura de Archivos
| Modo | Descripcion |
|------|-------------|
| `r` | Lectura (predeterminado) |
| `w` | Escritura (crear/truncar) |
| `a` | Agregar (crear/escribir al final) |
| `r+` | Lectura y escritura |
| `w+` | Lectura y escritura (crear/truncar) |
### Escribir a Archivo
```matlab
fid = fopen('output.txt', 'w');
fprintf(fid, 'Hola, %s!\n', 'Mundo');
fprintf(fid, 'Valor: %d\n', 42);
fclose(fid);
```
### Leer de Archivo
```matlab
fid = fopen('data.txt', 'r');
name = fscanf(fid, '%s', 1);
value = fscanf(fid, '%d', 1);
fclose(fid);
```
## Archivos Binarios
### Leer Binario
```matlab
fid = fopen('data.bin', 'r');
data = fread(fid, 100, 'float32');
fclose(fid);
```
### Escribir Binario
```matlab
fid = fopen('data.bin', 'w');
fwrite(fid, myData, 'float32');
fclose(fid);
```
## Archivos XML
```matlab
% Parsear XML
tree = xmlread('data.xml');
% Navegar y extraer datos
root = tree.getDocumentElement;
child = root.getFirstChildElement;
```
## Archivos de Imagen
```matlab
% Leer imagen
img = imread('image.png');
% Mostrar imagen
imshow(img)
% Escribir imagen
imwrite(img, 'output.png');
% Escribir JPEG con calidad
imwrite(img, 'output.jpg', 'Quality', 90);
```
## Ejemplos de Importacion
### Importar Texto de Ancho Fijo
```matlab
% Definir formato
format = '%2s %5f %4f %3f';
% Leer con textscan
fid = fopen('data.txt', 'r');
C = textscan(fid, format);
fclose(fid);
```
### Importar con Encabezado
```matlab
opts = detectImportOptions('data.csv');
opts.VariableNamesLine = 1;
opts.DataLines = 2:10;
T = readtable('data.csv', opts);
```
## Resumen
- `readmatrix()` para datos numericos en archivos delimitados
- `readtable()` para datos tabulares con encabezados
- `save()`/`load()` para archivos .mat de MATLAB
- Usar opcion `'Delimiter'` para diferentes separadores
- Manejar datos faltantes con `isnan()`, `rmmissing()`, `fillmissing()`
- Usar `fopen()`/`fprintf()`/`fscanf()` para formatos de archivo personalizados
- `imread()`/`imwrite()` para archivos de imagen
Comments
Comments powered by Giscus
To enable comments, add your Giscus embed code here.
Learn more about Giscus →