Matlab - Problema con fscanf

 
Vista:

Problema con fscanf

Publicado por Marta (10 intervenciones) el 13/03/2013 13:54:21
Buenos días,

Estoy intentando pasar un fichero de datos en *.txt de una estación hidrológica a matlab.

Soy nueva en esto de matlab por lo que me lo estoy tomando con calma e intentando probar con ejemplos con un menor número de variables y de datos, pero que luego pueda extrapolar al fichero con el que debo trabajar.

Bien, estoy intentando pasar esta serie de datos a una matriz en matlab, como he dicho antes es una abreviación de todos los datos que más tarde tendré que pasar:

"15-03-11 11:24:00",74,0.0
"14-03-11 11:26:00",73,19.0
"13-03-11 11:28:00",72,4.6
"12-03-11 11:30:00",71,5.8
"11-03-11 11:32:00",70,4.6
"10-03-11 11:34:00",69,78.5

lo hago con las siguientes órdenes:

clear all
close all
clc
fid=fopen('PRUEBA.txt','r');
M=fscanf(fid,'"%d-%d-%d %d:%d:%d",%d,%f',[8,2]);
M=M'


Y el Resultado que me aparece en Matlab es:
15 3 11 11 24 0 74 0

Duda:
¿Por qué solo me aparece la primera fila de datos?¿cómo podría resolver esto?

Muchas gracias¡
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

Problema con fscanf

Publicado por Marta (10 intervenciones) el 13/03/2013 14:42:08
Perdón, corrijo un pequeño detalle...

lo hago con las siguientes órdenes:

clear all
close all
clc
fid=fopen('PRUEBA.txt','r');
M=fscanf(fid,'"%d-%d-%d %d:%d:%d",%d,%f',[8,inf]);
M=M'
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

Problema con fscanf

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 13/03/2013 16:00:44
1
2
3
4
5
6
7
clear all
fid=fopen('datos.txt','r');
M=fscanf(fid,'"%d-%d-%d %d:%d:%d",%d,%g\n',[8,inf]);
fclose(fid);
format short
M=M';
display(M)


1
2
3
4
5
6
7
8
9
10
11
EJECUCION:
>> fscanf2
 
M =
 
   15.0000    3.0000   11.0000   11.0000   24.0000         0   74.0000         0
   14.0000    3.0000   11.0000   11.0000   26.0000         0   73.0000   19.0000
   13.0000    3.0000   11.0000   11.0000   28.0000         0   72.0000    4.6000
   12.0000    3.0000   11.0000   11.0000   30.0000         0   71.0000    5.8000
   11.0000    3.0000   11.0000   11.0000   32.0000         0   70.0000    4.6000
   10.0000    3.0000   11.0000   11.0000   34.0000         0   69.0000   78.5000




Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]

http://matlabcaballero.blogspot.com


http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Problema con fscanf

Publicado por Marta (10 intervenciones) el 13/03/2013 17:26:40
Gracias Jose,

Sino fuese por tu ayuda, mucha gente desistiría con esto del matlab..ya que son pequeños detalles los que hacen que el programita funcione o no.

Cuando tenga todo el archivo pasado a matlab lo pondré aquí para posibles consultas.

Ciiiaaoooo
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

Problema con fscanf

Publicado por Marta (10 intervenciones) el 14/03/2013 18:19:32
Hola de nuevo,

Me ha salido una nueva duda a la hora de trabajar con los datos reales. Le he dado vueltas y vueltas, cambiando cosas y buscando en otros threads pero no hay manera. A ver si podéis ayudarme.

Aquí dejo el problema con los datos reales

Datos en txt(no he puesto todas las filas de datos, pero los restantes vendrían a tener el mismo formato):

"TOA5","Risvollan CR1000","CR1000","31909","CR1000.Std.19","CPU:1065.CR1","48059","To_min"
"TIMESTAMP","RECORD","ID","LF_prst","LT_gr_C","GS_Wpm2","RA_01_avr","T_107_gr_C","Vind_1_min_arr(1)","Vind_1_min_arr(2)","VH_3_sek_Max","NB2_2_m_mm"
"TS","RN","","","","","","","","","",""
"","","Smp","Smp","Smp","Smp","Smp","Smp","Smp","Smp","Max","Smp"
"2010-12-17 13:10:00",774,1065,0.771,206.2,7.432,0.212,230.8,1,0
"2010-12-17 13:12:00",775,1065,0.716,206.2,0.947,0,0,0.5,0
"2010-12-17 13:14:00",776,1065,0.654,-99.9,11.62,0,0,0.1,0
"2011-05-11 08:40:00",777,1065,-1112,-99.9,"NAN","NAN",0,0,0
"2011-05-11 08:42:00",778,1065,"NAN",-99.9,"NAN","NAN",0,"NAN",0
"2011-05-11 08:44:00",779,1065,"NAN",-99.9,"NAN","NAN",0,"NAN",0
"2011-05-11 08:46:00",780,1065,"NAN",-99.9,"NAN","NAN",0,"NAN",0
"2011-05-11 08:48:00",781,1065,"NAN",-99.9,"NAN","NAN",0,"NAN",0


Propuesta para pasar este archivo matrixmix.txt a una matriz de matlab:


function M=matrixmix
clear all
close all
fid=fopen('matrixmix.txt','r')
enc=fgetl(fid); %elimina primera fila del encabezado
enc_2=fgetl(fid); %elimina segunda
enc_3=fgetl(fid); %elimina tercera
enc_4=fgetl(fid); %elimina cuarta y última fila del encabezado
M=fscanf(fid,'"%d-%d-%d %d:%d:%d",%d,%d,%f,%f,%f,%f,%f,%f,%f\n',[15,inf]);
fclose(fid);
M=M';
display(M)

Resultado:

2010 12 17 13 10 0 774 1065 0,771000000000000 206,200000000000 7,43200000000000 0,212000000000000 230,800000000000 1
2010 12 17 13 12 0 775 1065 0,716000000000000 206,200000000000 0,947000000000000 0 0 0,500000000000000
2010 12 17 13 14 0 776 1065 0,654000000000000 -99,9000000000000 11,6200000000000 0 0 0,100000000000000
2011 5 11 8 40 0 777 1065 -1112 -99,9000000000000 0 0 0 0


Es decir, la matriz resultado de matlab solo tiene 4 filas de datos, en vez de los cientos de filas que tiene el fichero matrixmix.txt

Supongo que el fallo está cuando en la cuarta fila y en adelante, aparece "NAN" en algunos valores. No se como podría solucionar este problema. Ya que no siempre en esa posición aparece "NAN", hay otras filas donde hay un valor numérico en vez de "NAN".

Espero haberme explicado claramente,

Gracias de nuevo.
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 JOSÉ JEREMÍAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Problema con fscanf

Publicado por JOSÉ JEREMÍAS CABALLERO (5917 intervenciones) el 14/03/2013 18:32:59
Bueno crea otro programa , donde leas línea por línea y donde encuentres el texto NAN, lo reemplaces por 0, y luego aplicas el código anterior.



Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]

http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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 JOSÉ JEREMÍAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Problema con fscanf

Publicado por JOSÉ JEREMÍAS CABALLERO (5917 intervenciones) el 14/03/2013 20:22:15
Mándame tu datos reales a mi correo. Ya que sino se va a perder tiempo, haciendo códigos no precisos. Desde principio se pone los datos reales, para hacer un código preciso de acuerdo a la base de datos, la forma del código depende del tipo de base de datos que uno tiene.


EJECUCION

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
>> fscanf3
 
M =
 
   1.0e+03 *
 
  Columns 1 through 7
 
    2.0100    0.0120    0.0170    0.0130    0.0100         0    0.7740
    2.0100    0.0120    0.0170    0.0130    0.0120         0    0.7750
    2.0100    0.0120    0.0170    0.0130    0.0140         0    0.7760
    2.0110    0.0050    0.0110    0.0080    0.0400         0    0.7770
    2.0110    0.0050    0.0110    0.0080    0.0420         0    0.7780
    2.0110    0.0050    0.0110    0.0080    0.0440         0    0.7790
    2.0110    0.0050    0.0110    0.0080    0.0460         0    0.7800
    2.0110    0.0050    0.0110    0.0080    0.0480         0    0.7810
 
  Columns 8 through 14
 
    1.0650    0.0008    0.2062    0.0074    0.0002    0.2308    0.0010
    1.0650    0.0007    0.2062    0.0009         0         0    0.0005
    1.0650    0.0007   -0.0999    0.0116         0         0    0.0001
    1.0650   -1.1120   -0.0999         0         0         0         0
    1.0650         0   -0.0999         0         0         0         0
    1.0650         0   -0.0999         0         0         0         0
    1.0650         0   -0.0999         0         0         0         0
    1.0650         0   -0.0999         0         0         0         0
 
  Column 15
 
         0
         0
         0
         0
         0
         0
         0
         0





Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]

http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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

Problema con fscanf

Publicado por Marta (10 intervenciones) el 15/03/2013 14:59:11
Gracias Jose,

Este fin de semana estaré peleando un poco más por mi cuenta con el programa y atando cabos. Y el domingo te envío un mail con los datos y el problema en cuestión.

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

Problema con fscanf

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 16/03/2013 01:21:56
1. Lees el archivo texto original.
2. modificas el archivo original los textos "NAN" por ceros.
3. Luego guardas los archivos modificados en otro texto
4. Lees el archivo modificado y extraes la matriz que deseas.

Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]

http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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

Problema con fscanf

Publicado por Marta (10 intervenciones) el 18/03/2013 21:45:56
Hola Jose,

Te envié al correo los datos reales.

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

Problema con fscanf

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 19/03/2013 05:09:53
Bueno Martha yo te había pedido la data ya hace mas de 4 días, y ese día era que me envíes tu data para hacer un programa y adaptarlo, pero te haz demorado en enviarlo. Ahora ya estoy en otro trabajos que tengo a la mano.
Si llegué abrir tu archivo, necesitas separar los archivos que me haz enviado, ya que sino no va leer los del años 2012 y 2013.
Siempre le digo a los usuarios que no demoren enviar sus datas, cuando les pido para ayudarle, pues mi tiempo va a variando día a día, por la asesorías online que hago día a día
Lo voy a ver mas adelante, cuando me libere un poco de las asesorías online, por la data que me haz enviado a mi correo tengo un compromiso contigo en ayudarte. Dame un tiempo.


Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]

http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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

Problema con fscanf

Publicado por Marta (10 intervenciones) el 19/03/2013 09:41:56
No sé a que te refieres con lo de que no podrá leer lo de los años 2012 y 2013. ¿Por la fecha? o por el tema de las 9 y 14 variables?

Perdona por la demora, pero queria intentar yo adelantar algo. Lo sé para la próxima, thanks¡
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

Problema con fscanf

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 19/03/2013 16:44:06
Al finalizar el año 2011 hay como 5 espacios, luego empieza el año 2012 pero empieza con una cantidad de palabras, pero recuerda que scanf() en el código esta adaptado para leer números y no palabras y desde allí ya no va leer.
Por eso se tendría modificar tu archivo de texto es decir separarlo por años para cada año, sino va a ser muy tedioso hacer un código para la forma de tu archivo te texto actual, además seria un código muy particular si se hiciera tal como esta tu archivo de texto.

Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]

http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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

Problema con fscanf

Publicado por Marta (10 intervenciones) el 19/03/2013 18:17:22
Ok, he eliminado los espacios en blanco y los textos ya que esta faena se puede ahorrar desde el textpad.

Te he enviado otro correo¡

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