2008-11-03 8 views
7

considere el siguiente archivoLectura de valores de texto en variables Matlab de archivos ASCII

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, la preparación de archivos de código de matlab y la evaluación de ellos no es una opción.

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

Respuesta

9

Sugiero ImportData para las operaciones de la siguiente manera:

d = importdata('filename.txt'); 

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

Otra interfaz útil para importar datos de manipulación como estos es la clase 'dataset' disponible en Statistics Toolbox.

1

sólo tiene que utilizar TextScan 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, 'título' habrá una serie de células que contiene células con cada columna partida en el interior, por lo que tendrá que cambiarlos en serie de células de cuerdas o lo que es lo que desea. 'datos' 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.

+0

Puede haber un número arbitrario de variables (columnas) –

+0

Si no conoce el número de columnas por adelantado, entonces tendrá que leer el archivo una línea a la vez. Si llama a textscan con un solo% sy ningún número limitante, leerá N número de cadenas de la línea. Creo que esto es mejor/más rápido que usar strtok. –

3

Si la cabecera está en la primera fila y luego

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

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

A continuación, puede utilizar

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

A continuación, puede utilizar strtok para dividir headerString en una matriz de celdas. Es uno de los enfoques que puedo pensar en trato con un número desconocido de columnas

Editar

fscanf fija llamada a la función

Cuestiones relacionadas