Matlab - Pegar columnas con matlab

   
Vista:

Pegar columnas con matlab

Publicado por Josesec (5 intervenciones) el 19/06/2010 23:25:52
Dispongo de un conjunto (252) de ficheros de texto (cada fichero es una sola columna de valores numéricos y todos lo ficheros tienen el mismo número de filas (936), es decir, todos los ficheros presentan un vector de iguales dimensiones) quisiera hacer un programa que me permitiera crear una matriz 936x252 a partir de un fichero de texto donde estuvieran listados (en orden) los ficheros. He creado el siguiente archivo (.m) pero me da el error siguiente: Attempt to execute SCRIPT ficheros as a function.
Podría alguien explicarme por qué da este error y cómo debería ser el programa? Muchas gracias!

matrix1=zeros(936,252);
fid =fopen(ficheros.m);

for dato = 1 : 252
tline = fgets(fid);
for n= 1 :936
matrix1( n,dato)=tline(n,1);
end
end
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Pegar columnas con matlab

Publicado por Julian Cuintaco (75 intervenciones) el 20/06/2010 16:43:06
Hola,

En la segunda línea del programa, 'ficheros.m' debe estar entre comilllas simples:

fid =fopen('ficheros.m');

Saludos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Pegar columnas con matlab

Publicado por josesec (5 intervenciones) el 20/06/2010 17:10:59
Muchas gracias por la respuesta, había olvidado las comillas... en cualquier caso el programa no funciona ( Index exceeds matrix dimensions), creo que el problema es que lee la variable "tline" como texto (nombre de un archivo) cuando yo quiero que lea dentro de ese archivo que esta lista en ficheros.m. Cómo puedo solucionar esto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Pegar columnas con matlab

Publicado por Julian Cuintaco (75 intervenciones) el 20/06/2010 17:16:48
Hola,

En vez de usar la función FGETS utiliza la función FREAD. En la documentación de matlab encuentras ejemplos de cómo usarla en sus varias formas posibles.

Saludos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Pegar columnas con matlab

Publicado por Josesec (5 intervenciones) el 20/06/2010 17:55:58
Lo he intentado pero me sigue dando el mismo error.. "Index exceeds dimension matrix"...

matrix1=zeros(936,252);
fid =fopen('ficheros.m');
for dato = 1 : 252
f = fread(fid,'int32');
for n= 1 :936
matrix1( n,dato)=f(n,dato);
end
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Pegar columnas con matlab

Publicado por Julian Cuintaco (75 intervenciones) el 21/06/2010 15:23:52
Hola,

Cuando lees el archivo 'ficheros.m', ¿'f' de qué dimensión es?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Dave

RE: Pegar columnas con matlab, La Solución

Publicado por Dave (934 intervenciones) el 21/06/2010 16:45:27
Hola José,

Aqui dos script para mostrar lo que deseas realizar.

Espero que sea de alguna ayuda.

Saludos.

Dave
correa.dave30@gmail.com

Script_01.m
-----------
%% programa para crear 252 ficheros de 936 filas.

clear,clc

fid0=fopen('fname.txt','w');

for n=1:252
tmp=ceil(100*rand(936,1));
disp(['Creando el archivo N° ',num2str(n)]);
name=['datos_',num2str(n),'.txt'];
fid=fopen(name,'w');
fprintf(fid,'%6.2f \n',tmp);
fclose(fid);

fprintf(fid0,'%10s\n',name);
end

fclose(fid0);

Script_02.m
-----------
%% programa para leer 252 ficheros de 936 filas.

clc,clear

DATA=[]; % Crea una matrix vacia para almacenar los datos de los ficheros

n=1; % Contador, ira cambiando en función al numero de ficheros

fid0=fopen('fname.txt','r'); % Archivo que contiene los nombre de los archivos a analizar

while 1 % Bucle que se ejecuta hasta leer la ultima linea del archivo 'fname.txt'
name = fgetl(fid0); % Lee cada línea de fname.txt
if ~ischar(name), % Verifica el contenido de la línea leida
break, % Si no hay nada en la línea leida, termina
end

tmp=load(name); % Almacena el contenido de fname en la variable tmp (temporal)
DATA(n,:)=tmp; % Asigna los datos del archivo fname a la DATA
disp(['Leyendo el archivo ',name]) % Anuncio para saber que esta realizando
clear tmp % Borra la variable temporal
n=n+1; % Incrementa el contador
end % Final del bucle While

fclose(fid0); % Cierra el archivo que contiene los nombre de los archivos

clear fid0 fid n name ans % Borra las varibles temporales

disp(' ') % Espacio en blanco
whos % Muestra el contenido de las variables en el espacio de trabajo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar