Lunes 23 de Diciembre de 2024, 08:27
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación Específica
»
Matlab
»
Lectura de Archivo de texto
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Lectura de Archivo de texto (Leído 1482 veces)
cimp
Nuevo Miembro
Mensajes: 6
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)
Tweet
allisap
Miembro MUY activo
Mensajes: 259
Nacionalidad:
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
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
)
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
clear
;
fid =
fopen
(
'prueba.txt'
,
'r'
)
;
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
)
a =
fscanf
(
fid,
'%f %f'
,
[
2
,
inf
]
)
;
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
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
....
CI:)
allisap
Miembro MUY activo
Mensajes: 259
Nacionalidad:
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
close
all
;
clear
;
x=
0
:
0.1
:
8
;
y=
sin
(
x
)
;
figure
(
1
)
;
h1=
plot
(
x,y
)
;
num_grafica=
1
;
cadena=
sprintf
(
'gráfica número=%d'
,num_grafica
)
;
title
(
cadena
)
;
set
(
h1,
'color'
,
[
0
0
1
]
)
;
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
Saludos
Victor Pasilla Campos
P.D No me digas Sr
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación Específica
»
Matlab
»
Lectura de Archivo de texto