Pregunta

Considere el siguiente archivo

var1 var2 variable3
1     2    3
11    22   33

Me gustaría cargar los números en una matriz y los títulos de las columnas en una variable que sería equivalente a:

variable_names = char('var1', 'var2', 'variable3');

No me importa dividir los nombres y los números en dos archivos, sin embargo, preparar archivos de código matlab y evaluarlos no es una opción.

Tenga en cuenta que puede haber un número arbitrario de variables (columnas)

¿Fue útil?

Solución

Sugiero importdata para operaciones como esta:

d = importdata('filename.txt');

El retorno es una estructura con los campos numéricos en un miembro llamado 'datos' y los encabezados de columna en un campo llamado 'colheaders'.

Otra interfaz útil para importar datos de manipulación como estos es la clase 'conjunto de datos' disponible en el Cuadro de herramientas de estadísticas.

Otros consejos

Si el encabezado está en la primera fila, entonces

A = dlmread(filename,delimString,2,1);

leerá los datos numéricos en la Matriz A.

Entonces puedes usar

fid = fopen(filename)
headerString = fscanf(fid,'%s/n') % reads header data into a string
fclose(fid)

Luego puede usar strtok para dividir el headerString en una matriz de celdas. Es un enfoque que se me ocurre tratar con un número desconocido de columnas

Editar

llamada de función fscanf fija

Simplemente use la exploración de texto con diferentes especificadores de formato.

fid = fopen(filename,'r');
heading = textscan(fid,'%s %s %s',1);
fgetl(fid); %advance the file pointer one line
data = textscan(fid,'%n %n %n');%read the rest of the data
fclose(fid);

En este caso, 'encabezado' será una matriz de celdas que contiene celdas con cada encabezado de columna dentro, por lo que deberá cambiarlas a una matriz de cadenas de cadenas o lo que sea que desee. 'data' será una matriz de celdas que contiene una matriz numérica para cada columna que lea, por lo que tendrá que juntarlas para formar una matriz.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top