Matlab - Duda lectura archivos

 
Vista:

Duda lectura archivos

Publicado por David (18 intervenciones) el 04/04/2011 04:19:26
Muy buenas, me gustarìa saber si en Matlab puedo leer exactamente lo que quiero de un archivo que contiene numeros y caracteres? Tengo algo de la siguiente forma:

Coherencia
9.419303118916224E-001
9.446708074760608E-001
8.557303481430320E-001
9.538850932525661E-001
9.302087725869406E-001
9.290638006039620E-001
9.386919134468965E-001
9.549963799777733E-001
9.282307069085058E-001
9.197310445267214E-001
9.104997572428034E-001
9.722581840259797E-001
9.267514055624307E-001
8.905637491429781E-001
4.163703835002012E-001
8.853471124641476E-001
Coher. Media= 8.936831106720388E-001
nº Func 12 Coher= 9.375765147918553E-001
nº Func 4 Coher= 7.620028983125897E-001

Y solo me interesa leer los tres ultimos numeros, es decir el 8.9368....9.3757....y 7.62002..... He probado eliminando las tantas headerlines anteriores, el problema es que tengo como doscientos archivos parecidos a este en los que me cambia la longitud. Hay alguna forma de de decirle que me lea esos 3.

Espero haberme explicado bien.

Gracias de antemano.
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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Duda lectura archivos

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 04/04/2011 08:32:00
HOLA DAVID,.

Me gustaria saber como obtienes estos resultados.
Coher. Media= 8.936831106720388E-001
nº Func 12 Coher= 9.375765147918553E-001
nº Func 4 Coher= 7.620028983125897E-001

Por que estoy haciendo un programa, para lo que haz pedido. Aqui una parte.

clc,clear
fid=fopen('daviddatos.txt');
% Lee filas, descartando la primera 1 fila
R=textscan(fid,' %f ', 'headerLines', 1);
fclose(fid);% Cierra el archivo
coher_Media=man(R{1})
%Tienes todos los datos en el cell array R.

%EJECUCION EN LA VENTNA DE COMANDOS:
>> daviddatos
Datos =
9.419303118916224e-001
9.446708074760608e-001
8.557303481430320e-001
9.538850932525661e-001
9.302087725869406e-001
9.290638006039620e-001
9.386919134468965e-001
9.549963799777733e-001
9.282307069085058e-001
9.197310445267214e-001
9.104997572428034e-001
9.722581840259797e-001
9.267514055624307e-001
8.905637491429781e-001
4.163703835002012e-001
8.853471124641476e-001


coher_Media =
8.936831106720388e-001

%este resultado es el mismo que tienes en Coher. Media

Saludos: JOSÉ JEREMIAS CABALLERO
ASESOR DE TESIS Y PROYECTOS DONDE SE NECESITA MATLAB
PROFESOR DE MATLAB Y METODOS NUMERICOS
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

Duda lectura archivos

Publicado por David (18 intervenciones) el 04/04/2011 22:01:49
Gracias José, los datos los obtengo de otro programa de analisis modales. La Coher.media es la media de todos los datos que vienen anteriormente. Y las dos ultimas filas evalua que cantidad de todas las coherencias de la lista están por encima de la media y cuales no( en este caso hay 12 por encima de la media y 4 q no lo están) y te calcula su media..

Perdona pero para que sirve la sentencia esta que me has puesto?
coher_Media=man(R{1})

Algo parecido a lo que me has mandado es lo que yo tenía sin esta última sentencia. Lo que hago cuando tengo sólo números es utilizar lo de cell2mat para poder utilizarlo pero claro en cuanto tengo letras que es lo que me ocurre, no tengo ni idea. Para un caso en particular se hacerlo pero no para todos, ya que como te comenté la longitud del archivo varía.

No se si habrà alguna forma para que sólo reconozca los datos que se encuentran detrás de los iguales(=).

Muchas gracias.
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 JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Duda lectura archivos

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 05/04/2011 03:40:58
Hola David.
disculpa, hubo error al momento de Copiar: la sentencia es:
coher_Media=mean(R{1}), osea la media aritmetica
Saludos: JOSÉ JEREMIAS CABALLERO
ASESOR DE TESIS Y PROYECTOS DONDE SE NECESITA MATLAB
PROFESOR DE MATLAB Y METODOS NUMERICOS
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 JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Duda lectura archivos

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 05/04/2011 03:46:37
Hola David.
disculpa, hubo error al momento de Copiar: la sentencia es:
coher_Media=mean(R{1}), calcula la media
Saludos: JOSÉ JEREMIAS CABALLERO
ASESOR DE TESIS Y PROYECTOS DONDE SE NECESITA MATLAB
PROFESOR DE MATLAB Y METODOS NUMERICOS
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

Duda lectura archivos

Publicado por David (18 intervenciones) el 05/04/2011 04:39:12
Ah claro es buena idea hacer yo mismo la media, pero lo de los dos ultimos valores son más dificiles no? a no ser que me cree un programita (q no seria muy dificil) que calculase tambien esas medias.

A pesar de eso, si no quisiera hacer yo mismo la media, se podia hacer algo. Te lo comento porque tengo otros archivos que leer y habia puesto este de ejemplo pero los demás no siguen una funcion logica como este de la media.

Un ejemplo es esto, que no está tan bien estructurado como el anterior, entonces, ¿podrìa leer solo los numeros? No te pido ni mucho menos que prepares ningún programa, ya me has ayudado mucho con el anterior, pero si me guiases a ver si se puede hacer. Para leer las frecuencias por ejemplo hago lo siguiente;

fid=fopen(archivo, 'rt');
frecs=textscan(fid, '%*s %*s %n %n*[]^\n','headerlines',3); %elimino las tres primeras filas y me %salto las dos primeras columnas y me quedo con la tercera y cuarta

El problema lo tengo cuando tengo más columnas. Que puedo hacer para poner una variable dentro del textscan que me haga %n tantas veces como columnas tengo?

ENSAYO: apoyo019 COHERENCIA MEDIA AJUSTE .6661

1 MODO 2 MODO
FREC. (Hz) 22.84 76.01
AMORT. (%) .4643 .8891

GDL ( 1) 54.92E-03 -354.73E-06
GDL ( 2) 1.43E-03 24.70E-03
GDL ( 3) 19.81E-03 36.86E-03
GDL ( 4) 37.26E-03 41.37E-03
GDL ( 5) 3.69E-03 -27.14E-03
GDL ( 6) 19.55E-03 -36.62E-03
GDL ( 7) 35.77E-03 -40.02E-03

INDICES DE AJUSTE
MAC sim. .9992 .9844
MSF sim. 1.0227 1.0866
MAC diag. .9999 .9933
MSF diag. 1.0004 1.0046

MAC DE MODOS
MODO 1 1.0000 -.0215
MODO 2 -.0215 1.0000


Gracias por la ayuda, de verdad
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 JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Duda lectura archivos

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 05/04/2011 08:24:36
Hola David.

Mejoré el programa anterior que puse en el foro. En este caso este programa calcula las tres medias que necesitas leer, y lo imprime.

clear
fid=fopen('daviddatos.txt');
% Lee filas, descartando la primera 1 fila
R=textscan(fid,' %f ', 'headerLines', 1);
fclose(fid);% Cierra el archivo
datos=R{1};
Media=mean(datos)
I=find(datos>Media); % halla los subindices de los datos que son mayores que media
MediaI=mean(datos(I))
J=find(datos<Media); % halla los subindices de los datos que son menores que media
MediaJ=mean(datos(J))

%EJECUCION
>> daviddatos

Media =
0.893683110672039

MediaI =
0.937576514791855

MediaJ =
0.762002898312590



Saludos: JOSÉ JEREMíAS CABALLERO
ASESOR DE TESIS Y PROYECTOS DONDE SE NECESITA MATLAB
PROFESOR DE MATLAB Y MÉTODOS NUMÉRICOS
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 JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Duda lectura archivos

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 05/04/2011 09:45:26
Hola David.
Tengo dos archivos de texto.
Del primero su nombre es daviddatos2.txt y lo que contiene es lo siguiente:

ENSAYO: apoyo019 COHERENCIA MEDIA AJUSTE .6661

1 MODO 2 MODO
FREC. (Hz) 22.84 76.01
AMORT. (%) .4643 .8891

GDL (1) 54.92E-03 -354.73E-06
GDL (2) 1.43E-03 24.70E-03
GDL (3) 19.81E-03 36.86E-03
GDL (4) 37.26E-03 41.37E-03
GDL (5) 3.69E-03 -27.14E-03
GDL (6) 19.55E-03 -36.62E-03
GDL (7) 35.77E-03 -40.02E-03


Y EL OTRO ARCHIVO tiene el nombre de daviddatos3.txt y lo que contiene es:

ENSAYO: apoyo019 COHERENCIA MEDIA AJUSTE .6661

1 MODO 2 MODO
FREC. (Hz) 22.84 76.01 3.4546
AMORT. (%) .4643 .8891 4.56576

GDL (1) 54.92E-03 -354.73E-06 3.5465
GDL (2) 1.43E-03 24.70E-03 3.4545
GDL (3) 19.81E-03 36.86E-03 3.546
GDL (4) 37.26E-03 41.37E-03 5.3465
GDL (5) 3.69E-03 -27.14E-03 7.2323
GDL (6) 19.55E-03 -36.62E-03 3.945
GDL (7) 35.77E-03 -40.02E-03 9.02323


% Y EL PROGRAMA EN MATLAB ES ESTA:
clear all,
name=input('Ingrese el nombre del (archivo.txt) : ','s');
n=input('Ingrese el número columnas n: ');
fid=fopen(name);
c=[' %f'];
for i=1:n-1
c=[c,' %f'];
end
frecs=textscan(fid,['%*s %*s', c],'headerlines',3);
fclose(fid);
for i=1:n
Frec(:,i)=frecs{i};
end
Frec

%EJECUCION EN LA VENTANA DE COMANDOS DEL PROGRAMA:

>> daviddatoss
Ingrese el nombre del (archivo.txt) : daviddatos2.txt
Ingrese el número columnas n: 2

Frec =
22.8400 76.0100
0.4643 0.8891
0.0549 -0.0004
0.0014 0.0247
0.0198 0.0369
0.0373 0.0414
0.0037 -0.0271
0.0196 -0.0366
0.0358 -0.0400

>> daviddatoss
Ingrese el nombre del (archivo.txt) : daviddatos3.txt
Ingrese el número columnas n: 3

Frec =
22.8400 76.0100 3.4546
0.4643 0.8891 4.5658
0.0549 -0.0004 3.5465
0.0014 0.0247 3.4545
0.0198 0.0369 3.5460
0.0373 0.0414 5.3465
0.0037 -0.0271 7.2323
0.0196 -0.0366 3.9450
0.0358 -0.0400 9.0232


Saludos: JOSÉ JEREMíAS CABALLERO
ASESOR DE TESIS Y PROYECTOS DONDE SE NECESITA MATLAB
PROFESOR DE MATLAB Y MÉTODOS NUMÉRICOS
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

Duda lectura archivos

Publicado por David (18 intervenciones) el 06/04/2011 00:20:18
Muchas gracias José. Lo probaré aunque el identificador no me funciona(me devuelve -1) y además no me di cuenta al pegarlo que se adapta a la web ya que por ejemplo los GDL los pone asi en mi archivo:
GDL ( 1) , con espacios, es decir hay tres columnas al empezar, lo mismo es por eso por lo que no me funciona tu programa, pero gracias de nuevo.¿ Puedo contar la cantidad de veces que aparece una palabra en un archivo? Como la cantidad de veces que aparece GDL.

Un saludo
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

Duda lectura archivos

Publicado por David (18 intervenciones) el 06/04/2011 00:22:39
Muchas gracias José, lo de la variable c como contador no se me había ocurrido, además no hay ningún problema porque de antemano puedo el número de columnas porque las puedo leer en otro archivo, Lo único que al copiarlo no se ve el formato que tiene que en el caso de los GDL es así:

GDL ( 1) numero numero, es decir hay q quitar las tres primeras columnas. El estúpido programa de los ensayos lo devuelve así. Entonces ahí viene el problema y es q las columnas no son perfectas, ya que en FREC Y AMORT solo tengo que quitar dos columnas FREC y (HZ), sin embargo a partir de GDL tengo que quitar 3.

Quizá por eso no me funciona tu programa, el identificador fid me da -1, por lo q no puedo seguir pero bueno lo interesante es lo del contador c que lo añadiré a mi programa a ver si funciona...
Las columnas las podría solucionar así pero ¿las filas? Es decir el número de GDL es variable y a ese dato sí que no puedo acceder a él. Había pensado en realizar una primera lectura al archivo en la que detecte las veces que aparece escrito GDL y una segunda lectura para obtener los datos ya sabidas las filas y columnas. Se puede conseguir el número de veces que aparece escrito GDL?

Gracias
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 JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Duda lectura archivos

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 06/04/2011 00:33:12
Hola David.

OBSERVACION:
"Quizá por eso no me funciona tu programa". EL PROGRAMA SI FUNCIONA BIEN.

NO PONGAS LOS COMENTARIOS TAN LIBREMENTE, PORQ SI ALGO PONGO EN EL FORO, ES PORQUE REALMENTE LO HE PROBADO VARIAS VECES Y TAMBIEN TE PONGO LA EJECUCION EN EL FORO.

Escribime a mi correo y dames tus datos, porque hay veces los datos se mueven cuando lo mandas via foro. Asi te pueda ayudar con mas precision.

Saludos: JOSÉ JEREMíAS CABALLERO
ASESOR DE TESIS Y PROYECTOS DONDE SE NECESITA MATLAB
PROFESOR DE MATLAB Y MÉTODOS NUMÉRICOS
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

Duda lectura archivos

Publicado por David (18 intervenciones) el 06/04/2011 01:10:10
Tiene razón, le pido disculpas.

Un saludo
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

Duda lectura archivos

Publicado por David (18 intervenciones) el 06/04/2011 01:13:13
Supongo que es problema mio porque ya vi que en tu ejecución si funcionaba. Pensaba que a lo mejor era el hecho del copy paste al foro y que a lo mejor ese era mi problema.

Un saludo y disculpas.
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