• Lunes 23 de Diciembre de 2024, 08:27

Autor Tema:  Lectura de Archivo de texto  (Leído 1482 veces)

cimp

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Lectura de Archivo de texto
« en: Lunes 27 de Abril de 2009, 11:23 »
0
Holas,

Estoy embolatada tratatando de leer el siguiente archivo de texto (ver mas abajo). El objetivo de leer este archivo de texto es graficar cada set de datos "Theta_m" vs "Y" en una misma grafica.

Como hacer para reconocer la tabla de datos de cada set de datos, saltando los textos entre cada set de datos?
Por favor alguien que me ayude a resolver esto... Mas abajo pongo el script que hice, pero no es eficiente porque tengo diferentes archivos de texto como este pero tienen un numero variable de campos que componen las columnas "Theta_m" vs "Y"....

Muchas gracias de antemano,

CI.




************************************************************************************************
 
 
  X =   13500.    
  Z = -0.50000    
  Solids phase =  1
  Time =   0.0000    
       Y             Theta_m
    78500.       0.32713E+06
    79500.       0.32713E+06
    80500.       0.32713E+06
    81500.       0.32713E+06
    82500.       0.32713E+06
    83500.       0.32713E+06
    84500.       0.32713E+06
    85500.       0.32713E+06
    86500.       0.32713E+06
    87500.       0.32713E+06
    88500.       0.32713E+06
    89500.       0.32713E+06
    90500.       0.32713E+06
    91500.       0.32713E+06
    92500.       0.32713E+06
    93500.       0.32713E+06
    94500.       0.32713E+06
    95500.       0.32713E+06
    96500.       0.32713E+06
    97500.       0.32713E+06
    98500.       0.32713E+06
  Time =   100.00    
       Y             Theta_m
    78500.       0.32713E+06
    79500.       0.32713E+06
    80500.       0.32713E+06
    81500.       0.32713E+06
    82500.       0.32713E+06
    83500.       0.32713E+06
    84500.       0.32713E+06
    85500.       0.32713E+06
    86500.       0.32713E+06
    87500.       0.32713E+06
    88500.       0.32713E+06
    89500.       0.32713E+06
    90500.       0.32713E+06
    91500.       0.32713E+06
    92500.       0.32713E+06
    93500.       0.32713E+06
    94500.       0.32713E+06
    95500.       0.32713E+06
    96500.       0.32713E+06
    97500.       0.32713E+06
    98500.       0.32713E+06
  Time =   200.00    
       Y             Theta_m
    78500.       0.32713E+06
    79500.       0.32713E+06
    80500.       0.32713E+06
    81500.       0.32713E+06
    82500.       0.32713E+06
    83500.       0.32713E+06
    84500.       0.32713E+06
    85500.       0.32713E+06
    86500.       0.32713E+06
    87500.       0.32713E+06
    88500.       0.32713E+06
    89500.       0.32713E+06
    90500.       0.32713E+06
    91500.       0.32713E+06
    92500.       0.32713E+06
    93500.       0.32713E+06
    94500.       0.32713E+06
    95500.       0.32713E+06
    96500.       0.32713E+06
    97500.       0.32713E+06
    98500.       0.32713E+06
  Time =   300.00    
       Y             Theta_m
    78500.       0.32713E+06
    79500.       0.32713E+06
    80500.       0.32713E+06
    81500.       0.32713E+06
    82500.       0.32713E+06
    83500.       0.32713E+06
    84500.       0.32713E+06
    85500.       0.32713E+06
    86500.       0.32713E+06
    87500.       0.32713E+06
    88500.       0.32713E+06
    89500.       0.32713E+06
    90500.       0.32713E+06
    91500.       0.32713E+06
    92500.       0.32713E+06
    93500.       0.32713E+06
    94500.       0.32713E+06
    95500.       0.32713E+06
    96500.       0.32713E+06
    97500.       0.32713E+06
    98500.       0.32713E+06
  Time =   400.00    
       Y             Theta_m
    78500.       0.32713E+06
    79500.       0.32713E+06
    80500.       0.32713E+06
    81500.       0.32713E+06
    82500.       0.32713E+06
    83500.       0.32713E+06
    84500.       0.32713E+06
    85500.       0.32713E+06
    86500.       0.32713E+06
    87500.       0.32713E+06
    88500.       0.32713E+06
    89500.       0.32713E+06
    90500.       0.32713E+06
    91500.       0.32713E+06
    92500.       0.32713E+06
    93500.       0.32713E+06
    94500.       0.32713E+06
    95500.       0.32713E+06
    96500.       0.32713E+06
    97500.       0.32713E+06
    98500.       0.32714E+06
**************************************************************************************************************************

Script:

clear all,

% opening the file
fid = fopen('Mug_profile_x15_y80100_t01000.txt', 'r');

% reading the file and assigning variables
xcoor=fscanf(fid,'%s',3)
zcoor=fscanf(fid,'%s',3)
solids=fscanf(fid,'%s',4)
Time1=fscanf(fid,'%s',3)
y=fscanf(fid,'%s',1)
var=fscanf(fid,'%s',1)

% First data set
y1=fscanf(fid,'%s',1)
x1=fscanf(fid,'%s',1)
y2=fscanf(fid,'%s',1)
x2=fscanf(fid,'%s',1)
y3=fscanf(fid,'%s',1)
x3=fscanf(fid,'%s',1)
y4=fscanf(fid,'%s',1)
x4=fscanf(fid,'%s',1)
y5=fscanf(fid,'%s',1)
x5=fscanf(fid,'%s',1)
y6=fscanf(fid,'%s',1)
x6=fscanf(fid,'%s',1)
y7=fscanf(fid,'%s',1)
x7=fscanf(fid,'%s',1)
y8=fscanf(fid,'%s',1)
x8=fscanf(fid,'%s',1)
y9=fscanf(fid,'%s',1)
x9=fscanf(fid,'%s',1)
y10=fscanf(fid,'%s',1)
x10=fscanf(fid,'%s',1)
y11=fscanf(fid,'%s',1)
x11=fscanf(fid,'%s',1)
y12=fscanf(fid,'%s',1)
x12=fscanf(fid,'%s',1)
y13=fscanf(fid,'%s',1)
x13=fscanf(fid,'%s',1)
y14=fscanf(fid,'%s',1)
x14=fscanf(fid,'%s',1)
y15=fscanf(fid,'%s',1)
x15=fscanf(fid,'%s',1)
y16=fscanf(fid,'%s',1)
x16=fscanf(fid,'%s',1)
y17=fscanf(fid,'%s',1)
x17=fscanf(fid,'%s',1)
y18=fscanf(fid,'%s',1)
x18=fscanf(fid,'%s',1)
y19=fscanf(fid,'%s',1)
x19=fscanf(fid,'%s',1)
y20=fscanf(fid,'%s',1)
x20=fscanf(fid,'%s',1)
y21=fscanf(fid,'%s',1)
x21=fscanf(fid,'%s',1)

% array
x=[str2num(x1);str2num(x2);str2num(x3);str2num(x4);str2num(x5);str2num(x6);str2num(x7);str2num(x8);str2num(x9);str2num(x10);str2num(x11);str2num(x12);str2num(x16);str2num(x17);str2num(x18);str2num(x19);str2num(x20);str2num(x21)]
y=[str2num(y1);str2num(y2);str2num(y3);str2num(y4);str2num(y5);str2num(y6);str2num(y7);str2num(y8);str2num(y9);str2num(y10);str2num(y11);str2num(y12);str2num(y16);str2num(y17);str2num(y18);str2num(y19);str2num(y20);str2num(y21)]

figure(1)
subplot(1,5,1),plot(x/10,y/100,'.'),title([Time1 ' ' xcoor]),ylabel('Height above the reservoir (m)'),xlabel('Viscosity (Pa.s)')
hold on

%2nd data set
Time2=fscanf(fid,'%s',3)
y=fscanf(fid,'%s',1)
var=fscanf(fid,'%s',1)

y1=fscanf(fid,'%s',1)
x1=fscanf(fid,'%s',1)
y2=fscanf(fid,'%s',1)
x2=fscanf(fid,'%s',1)
y3=fscanf(fid,'%s',1)
x3=fscanf(fid,'%s',1)
y4=fscanf(fid,'%s',1)
x4=fscanf(fid,'%s',1)
y5=fscanf(fid,'%s',1)
x5=fscanf(fid,'%s',1)
y6=fscanf(fid,'%s',1)
x6=fscanf(fid,'%s',1)
y7=fscanf(fid,'%s',1)
x7=fscanf(fid,'%s',1)
y8=fscanf(fid,'%s',1)
x8=fscanf(fid,'%s',1)
y9=fscanf(fid,'%s',1)
x9=fscanf(fid,'%s',1)
y10=fscanf(fid,'%s',1)
x10=fscanf(fid,'%s',1)
y11=fscanf(fid,'%s',1)
x11=fscanf(fid,'%s',1)
y12=fscanf(fid,'%s',1)
x12=fscanf(fid,'%s',1)
y13=fscanf(fid,'%s',1)
x13=fscanf(fid,'%s',1)
y14=fscanf(fid,'%s',1)
x14=fscanf(fid,'%s',1)
y15=fscanf(fid,'%s',1)
x15=fscanf(fid,'%s',1)
y16=fscanf(fid,'%s',1)
x16=fscanf(fid,'%s',1)
y17=fscanf(fid,'%s',1)
x17=fscanf(fid,'%s',1)
y18=fscanf(fid,'%s',1)
x18=fscanf(fid,'%s',1)
y19=fscanf(fid,'%s',1)
x19=fscanf(fid,'%s',1)
y20=fscanf(fid,'%s',1)
x20=fscanf(fid,'%s',1)
y21=fscanf(fid,'%s',1)
x21=fscanf(fid,'%s',1)

% array
x2=[str2num(x1);str2num(x2);str2num(x3);str2num(x4);str2num(x5);str2num(x6);str2num(x7);str2num(x8);str2num(x9);str2num(x10);str2num(x11);str2num(x12);str2num(x16);str2num(x17);str2num(x18);str2num(x19);str2num(x20);str2num(x21)]
y2=[str2num(y1);str2num(y2);str2num(y3);str2num(y4);str2num(y5);str2num(y6);str2num(y7);str2num(y8);str2num(y9);str2num(y10);str2num(y11);str2num(y12);str2num(y16);str2num(y17);str2num(y18);str2num(y19);str2num(y20);str2num(y21)]

figure(1)
subplot(1,5,2),plot(x2/10,y2/100,'.'),title([Time2 ' ' xcoor]),ylabel('Height above the reservoir (m)'),xlabel('Viscosity (Pa.s)')
hold on

%3

Time3=fscanf(fid,'%s',3)
y=fscanf(fid,'%s',1)
var=fscanf(fid,'%s',1)

y1=fscanf(fid,'%s',1)
x1=fscanf(fid,'%s',1)
y2=fscanf(fid,'%s',1)
x2=fscanf(fid,'%s',1)
y3=fscanf(fid,'%s',1)
x3=fscanf(fid,'%s',1)
y4=fscanf(fid,'%s',1)
x4=fscanf(fid,'%s',1)
y5=fscanf(fid,'%s',1)
x5=fscanf(fid,'%s',1)
y6=fscanf(fid,'%s',1)
x6=fscanf(fid,'%s',1)
y7=fscanf(fid,'%s',1)
x7=fscanf(fid,'%s',1)
y8=fscanf(fid,'%s',1)
x8=fscanf(fid,'%s',1)
y9=fscanf(fid,'%s',1)
x9=fscanf(fid,'%s',1)
y10=fscanf(fid,'%s',1)
x10=fscanf(fid,'%s',1)
y11=fscanf(fid,'%s',1)
x11=fscanf(fid,'%s',1)
y12=fscanf(fid,'%s',1)
x12=fscanf(fid,'%s',1)
y13=fscanf(fid,'%s',1)
x13=fscanf(fid,'%s',1)
y14=fscanf(fid,'%s',1)
x14=fscanf(fid,'%s',1)
y15=fscanf(fid,'%s',1)
x15=fscanf(fid,'%s',1)
y16=fscanf(fid,'%s',1)
x16=fscanf(fid,'%s',1)
y17=fscanf(fid,'%s',1)
x17=fscanf(fid,'%s',1)
y18=fscanf(fid,'%s',1)
x18=fscanf(fid,'%s',1)
y19=fscanf(fid,'%s',1)
x19=fscanf(fid,'%s',1)
y20=fscanf(fid,'%s',1)
x20=fscanf(fid,'%s',1)
y21=fscanf(fid,'%s',1)
x21=fscanf(fid,'%s',1)

% array
x3=[str2num(x1);str2num(x2);str2num(x3);str2num(x4);str2num(x5);str2num(x6);str2num(x7);str2num(x8);str2num(x9);str2num(x10);str2num(x11);str2num(x12);str2num(x16);str2num(x17);str2num(x18);str2num(x19);str2num(x20);str2num(x21)]
y3=[str2num(y1);str2num(y2);str2num(y3);str2num(y4);str2num(y5);str2num(y6);str2num(y7);str2num(y8);str2num(y9);str2num(y10);str2num(y11);str2num(y12);str2num(y16);str2num(y17);str2num(y18);str2num(y19);str2num(y20);str2num(y21)]

figure(1)
subplot(1,5,3),plot(x3/10,y3/100,'.'),title([Time3 ' ' xcoor]),ylabel('Height above the reservoir (m)'),xlabel('Viscosity (Pa.s)')
hold on

% 4th data set

Time4=fscanf(fid,'%s',3)
y=fscanf(fid,'%s',1)
var=fscanf(fid,'%s',1)

y1=fscanf(fid,'%s',1)
x1=fscanf(fid,'%s',1)
y2=fscanf(fid,'%s',1)
x2=fscanf(fid,'%s',1)
y3=fscanf(fid,'%s',1)
x3=fscanf(fid,'%s',1)
y4=fscanf(fid,'%s',1)
x4=fscanf(fid,'%s',1)
y5=fscanf(fid,'%s',1)
x5=fscanf(fid,'%s',1)
y6=fscanf(fid,'%s',1)
x6=fscanf(fid,'%s',1)
y7=fscanf(fid,'%s',1)
x7=fscanf(fid,'%s',1)
y8=fscanf(fid,'%s',1)
x8=fscanf(fid,'%s',1)
y9=fscanf(fid,'%s',1)
x9=fscanf(fid,'%s',1)
y10=fscanf(fid,'%s',1)
x10=fscanf(fid,'%s',1)
y11=fscanf(fid,'%s',1)
x11=fscanf(fid,'%s',1)
y12=fscanf(fid,'%s',1)
x12=fscanf(fid,'%s',1)
y13=fscanf(fid,'%s',1)
x13=fscanf(fid,'%s',1)
y14=fscanf(fid,'%s',1)
x14=fscanf(fid,'%s',1)
y15=fscanf(fid,'%s',1)
x15=fscanf(fid,'%s',1)
y16=fscanf(fid,'%s',1)
x16=fscanf(fid,'%s',1)
y17=fscanf(fid,'%s',1)
x17=fscanf(fid,'%s',1)
y18=fscanf(fid,'%s',1)
x18=fscanf(fid,'%s',1)
y19=fscanf(fid,'%s',1)
x19=fscanf(fid,'%s',1)
y20=fscanf(fid,'%s',1)
x20=fscanf(fid,'%s',1)
y21=fscanf(fid,'%s',1)
x21=fscanf(fid,'%s',1)

% array
x4=[str2num(x1);str2num(x2);str2num(x3);str2num(x4);str2num(x5);str2num(x6);str2num(x7);str2num(x8);str2num(x9);str2num(x10);str2num(x11);str2num(x12);str2num(x16);str2num(x17);str2num(x18);str2num(x19);str2num(x20);str2num(x21)]
y4=[str2num(y1);str2num(y2);str2num(y3);str2num(y4);str2num(y5);str2num(y6);str2num(y7);str2num(y8);str2num(y9);str2num(y10);str2num(y11);str2num(y12);str2num(y16);str2num(y17);str2num(y18);str2num(y19);str2num(y20);str2num(y21)]

figure(1)
subplot(1,5,4),plot(x4/10,y4/100,'.'),title([Time4 ' ' xcoor]),ylabel('Height above the reservoir (m)'),xlabel('Viscosity (Pa.s)')
hold on

% 5th data set

Time5=fscanf(fid,'%s',3)
y=fscanf(fid,'%s',1)
var=fscanf(fid,'%s',1)

y1=fscanf(fid,'%s',1)
x1=fscanf(fid,'%s',1)
y2=fscanf(fid,'%s',1)
x2=fscanf(fid,'%s',1)
y3=fscanf(fid,'%s',1)
x3=fscanf(fid,'%s',1)
y4=fscanf(fid,'%s',1)
x4=fscanf(fid,'%s',1)
y5=fscanf(fid,'%s',1)
x5=fscanf(fid,'%s',1)
y6=fscanf(fid,'%s',1)
x6=fscanf(fid,'%s',1)
y7=fscanf(fid,'%s',1)
x7=fscanf(fid,'%s',1)
y8=fscanf(fid,'%s',1)
x8=fscanf(fid,'%s',1)
y9=fscanf(fid,'%s',1)
x9=fscanf(fid,'%s',1)
y10=fscanf(fid,'%s',1)
x10=fscanf(fid,'%s',1)
y11=fscanf(fid,'%s',1)
x11=fscanf(fid,'%s',1)
y12=fscanf(fid,'%s',1)
x12=fscanf(fid,'%s',1)
y13=fscanf(fid,'%s',1)
x13=fscanf(fid,'%s',1)
y14=fscanf(fid,'%s',1)
x14=fscanf(fid,'%s',1)
y15=fscanf(fid,'%s',1)
x15=fscanf(fid,'%s',1)
y16=fscanf(fid,'%s',1)
x16=fscanf(fid,'%s',1)
y17=fscanf(fid,'%s',1)
x17=fscanf(fid,'%s',1)
y18=fscanf(fid,'%s',1)
x18=fscanf(fid,'%s',1)
y19=fscanf(fid,'%s',1)
x19=fscanf(fid,'%s',1)
y20=fscanf(fid,'%s',1)
x20=fscanf(fid,'%s',1)
y21=fscanf(fid,'%s',1)
x21=fscanf(fid,'%s',1)

% array
x5=[str2num(x1);str2num(x2);str2num(x3);str2num(x4);str2num(x5);str2num(x6);str2num(x7);str2num(x8);str2num(x9);str2num(x10);str2num(x11);str2num(x12);str2num(x16);str2num(x17);str2num(x18);str2num(x19);str2num(x20);str2num(x21)]
y5=[str2num(y1);str2num(y2);str2num(y3);str2num(y4);str2num(y5);str2num(y6);str2num(y7);str2num(y8);str2num(y9);str2num(y10);str2num(y11);str2num(y12);str2num(y16);str2num(y17);str2num(y18);str2num(y19);str2num(y20);str2num(y21)]

figure(1)
subplot(1,5,5),plot(x5/10,y5/100,'.'),title([Time5 ' ' xcoor]),ylabel('Height above the reservoir (m)'),xlabel('Viscosity (Pa.s)')
hold on



fclose(fid)

allisap

  • Miembro MUY activo
  • ***
  • Mensajes: 259
  • Nacionalidad: mx
    • Ver Perfil
Re: Lectura de Archivo de texto
« Respuesta #1 en: Lunes 27 de Abril de 2009, 19:27 »
0
Saludos


primero que nada bienvenido al foro , vamos a ver en que te podemos ayudar

por como esta formado tu archivo de texto creo que estas leyendo mal tus datos en las lineas iniciales
tu tienes esto:

Código: Matlab M
  1. xcoor=fscanf(fid,'%s',3)
  2. zcoor=fscanf(fid,'%s',3)
  3. solids=fscanf(fid,'%s',4)
  4. Time1=fscanf(fid,'%s',3)
  5. y=fscanf(fid,'%s',1)
  6. var=fscanf(fid,'%s',1)
  7.  

pero de esa forma estas leyendo todo como cadenas de texto (puedes comprobarlo en el workspace, veras que aparecen como variables tipo char)
y asi con puedes utilizarlos,
intenta algo asi:

Código: Matlab M
  1. fid = fopen('prueba.txt', 'r');
  2. texto=fscanf(fid,'%s',2)
  3. xcoor=fscanf(fid,'%f',1)
  4. texto=fscanf(fid,'%s',2)
  5. zcoor=fscanf(fid,'%f',1)
  6. texto=fscanf(fid,'%s',3)
  7. solids=fscanf(fid,'%f',1)
  8. texto=fscanf(fid,'%s',2)
  9. Time1=fscanf(fid,'%f',1)
  10. texto=fscanf(fid,'%s',2)
  11. a = fscanf(fid,'%f %f',[2 , inf]);
  12.  
  13.  
aqui uso la variable temporal 'texto' para eliminar los textos o etiquetas y asi quedarme solo con  los valores numéricos, que leo como flotantes
al final en la variable a se almacena una matriz con los valores de Y y var, esto lee todos los datos hasta que encuentra otra etiqueta
de esta forma lees todos los valores y no necesitas hacerlo de uno en uno,

espero te sirva

Victor Pasilla Campos
Puebla, Pue.

cimp

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Lectura de Archivo de texto
« Respuesta #2 en: Jueves 30 de Abril de 2009, 09:11 »
0
Estimado Sr. Victor,

Le agradezco infinitamente la ayuda que me ha dado. He aprendido muchisisisisimo con este ejercicio. He adjuntado un par de lineas al codigo (el bucle while) para leer todos los archivos del mismo archivo de entrada:

*************************************************************************************************************************************************************
clear;
fid = fopen('Mug_profile_x15_y80100_t01000.txt', 'r');
while ~feof(fid)
texto=fscanf(fid,'%s',2);
xcoor=fscanf(fid,'%f',1);
texto=fscanf(fid,'%s',2);
zcoor=fscanf(fid,'%f',1);
texto=fscanf(fid,'%s',3);
solids=fscanf(fid,'%f',1);
texto=fscanf(fid,'%s',2);
Time1=fscanf(fid,'%f',1);
texto=fscanf(fid,'%s',2);  % eliminar los textos o etiquetas y asi quedarme solo con los valores numéricos  que leo como flotantes
a = fscanf(fid,'%f %f',[2 , inf]);
% plots
plot(a(2,:),a(1,:)),
hold on
end
fclose(fid)
*************************************************************************************************************************************************************

Tengo una nueva pregunta:

Es posible que cada plot que sale me lo etiquete con una legenda correspondiente a la variable Time1 y/o que cada plot me salga de un color diferente? se puede hacer esto en este mismo programa o debo hacer una funcion aparte?

Muchas gracias de antemano y de nuevo gracias por la ayuda recibida   :good: ....

CI:)

allisap

  • Miembro MUY activo
  • ***
  • Mensajes: 259
  • Nacionalidad: mx
    • Ver Perfil
Re: Lectura de Archivo de texto
« Respuesta #3 en: Jueves 30 de Abril de 2009, 19:42 »
0
bueno la primera parte, lo de cambiar la leyenda, eso lo puedes hacer con el comando sprintf, imprimiendo a una cadena  :)

por ejemplo el siguiente codigo te ayudara a cambiar el titulo de grafica,

Código: Matlab M
  1. x=0:0.1:8;
  2. y=sin(x);
  3. figure(1);
  4. h1=plot (x,y);
  5. num_grafica=1;
  6. cadena=sprintf ('gráfica número=%d',num_grafica);
  7. title(cadena);
  8. set (h1,'color',[0 0 1]);
  9.  

para la segunda parte de la pregunta ,lo de cambiar el color de la grafica, eso lo puedes hacer con la ultima linea ,usando el comando set para cambiar las propiedades de la grafica, observa que se cambian las propiedades del color enviado un arreglo de tres elementos (los valores R G B ),al variar estos valores varias el color de la grafica,...
espero te sirva :D

Saludos :hola:
Victor Pasilla Campos
P.D No me digas Sr :ouch: