Lectura de archivos dat en bucle
Publicado por Joan (2 intervenciones) el 21/11/2013 13:37:58
Hola,
Tengo un problema y no sé como solucionarlo, a ver si alguien me puede ayudar. Tengo escrito un programa que lee un archivo externo DAT (columnas de números) hace un cierto numero de calculos y escribe en otro archivo. Hasta aquí bién, pero me gustaría hacer lo mismo en 100 archivos más de manera automática y no sé como pedirle que que vaya cogiendo los archivos de uno en uno y aplique el programa. Los archivos tienen el mismo nombre y sólo cambia un numero al final del nombre por lo que intenté usar un for k=1:n però solo me funciona en la primera iteración. Me genera el fallo siguiente:
Subscripted assignment dimension mismatch.
Error in lecturaAD4campv2 (line 38)
Pcorr(:,1)=P(:,3);
Os dejo el programa por si alguién me puede ayudar. Gracias
function lecturaAD=lecturaAD(arxiu)
path = ['\Users\usuari\JoanTorrensSerra\recerca\matlab\frequenciamostra\Q1_sin_MT\']
temp=[1:1:26];
n= length (temp);
for k=1:n
name=[path,'ADQ1_',int2str(temp(k)),'.dat'];
A = dlmread(name,'\t',0,0);
%A = load(arxiu);
v=input('camp=')
mq=1.02;%input('Massa quars= ');
mm=0.15;%input('Massa mostra= ');
FQ=91352;%input('Frequencia del quarz= ');
IFQ=1.4e-4;%input('Friccio interna del quarz= ');
Cal=0.656;%input('calibracio= ');
Mcorr=(mq+mm)/mm;
M=(mq+mm);
%T=input('Temperatura= ');
amp=A(:,3);
[ampmax,I]=max(amp);
l=length(amp);
for j=3:5;
for i=1:I;
P(i,j)=A(i,j); %Pujada%
end
for i=I+1:l;
B(i-I,j)=A(i,j); %Baixada%
end
end
% correccions%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Pcorr(:,1)=P(:,3);
Bcorr(:,1)=B(:,3);
Pcorr(:,2)=Cal*(P(:,4)*M-(mq*IFQ))/mm;
Bcorr(:,2)=Cal*(B(:,4)*M-(mq*IFQ))/mm;
Pcorr(:,3)=(P(:,5)-((FQ*mq)/(mm+mq)))*Mcorr;
Bcorr(:,3)=(B(:,5)-((FQ*mq)/(mm+mq)))*Mcorr;
% plot(Pcorr(:,1),Pcorr(:,3))
% hold on
% plot(Bcorr(:,1),Bcorr(:,3))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
z(1)=v;
g=find(Pcorr(:,1)>=2.4e-7);
gg=min(g)
z(2)=Pcorr(gg,1);
z(3)=Pcorr(gg,2);
z(4)=Pcorr(gg,3);
r=find(Pcorr(:,1)>=9.5e-6)
rr=min(r)
z(5)=Pcorr(rr,1);
z(6)=Pcorr(rr,2)-Pcorr(gg,2);
z(7)=Pcorr(rr,3)-Pcorr(gg,3);
z(8)=Pcorr(rr,3)^2-Pcorr(gg,3)^2;
w(1)=v;
gb=find(Bcorr(:,1)>=2.4e-7)
ggb=max(gb)
w(2)=Bcorr(ggb,1);
w(3)=Bcorr(ggb,2);
w(4)=Bcorr(ggb,3);
rb=find(Bcorr(:,1)>=9.5e-6)
rrb=max(rb)
w(5)=Bcorr(rrb,1);
w(6)=Bcorr(rrb,2)-Bcorr(ggb,2);
w(7)=Bcorr(rrb,3)-Bcorr(ggb,3);
w(8)=Bcorr(rrb,3)^2-Bcorr(ggb,3)^2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
path = ['\Users\usuari\JoanTorrensSerra\recerca\matlab\frequenciamostra\Q1_sin_MT\'];
% v=input('vols gravar-ho? s/n: ','s')
% if v=='s'
% namep=[path,'p',arxiu];
% %nomesc=input('Nom fitxer pujada: ','s')
% dlmwrite(namep,Pcorr,'\t')
%
% %nomref=input('Nom fitxer baixada: ','s')
% nameb=[path,'b',arxiu];
% dlmwrite(nameb,Bcorr,'\t')
%
% namez=[path,'z',arxiu];
% dlmwrite(namez,z,'\t')
%
% namew=[path,'w',arxiu];
% dlmwrite(namew,w,'\t')
% else
end
Tengo un problema y no sé como solucionarlo, a ver si alguien me puede ayudar. Tengo escrito un programa que lee un archivo externo DAT (columnas de números) hace un cierto numero de calculos y escribe en otro archivo. Hasta aquí bién, pero me gustaría hacer lo mismo en 100 archivos más de manera automática y no sé como pedirle que que vaya cogiendo los archivos de uno en uno y aplique el programa. Los archivos tienen el mismo nombre y sólo cambia un numero al final del nombre por lo que intenté usar un for k=1:n però solo me funciona en la primera iteración. Me genera el fallo siguiente:
Subscripted assignment dimension mismatch.
Error in lecturaAD4campv2 (line 38)
Pcorr(:,1)=P(:,3);
Os dejo el programa por si alguién me puede ayudar. Gracias
function lecturaAD=lecturaAD(arxiu)
path = ['\Users\usuari\JoanTorrensSerra\recerca\matlab\frequenciamostra\Q1_sin_MT\']
temp=[1:1:26];
n= length (temp);
for k=1:n
name=[path,'ADQ1_',int2str(temp(k)),'.dat'];
A = dlmread(name,'\t',0,0);
%A = load(arxiu);
v=input('camp=')
mq=1.02;%input('Massa quars= ');
mm=0.15;%input('Massa mostra= ');
FQ=91352;%input('Frequencia del quarz= ');
IFQ=1.4e-4;%input('Friccio interna del quarz= ');
Cal=0.656;%input('calibracio= ');
Mcorr=(mq+mm)/mm;
M=(mq+mm);
%T=input('Temperatura= ');
amp=A(:,3);
[ampmax,I]=max(amp);
l=length(amp);
for j=3:5;
for i=1:I;
P(i,j)=A(i,j); %Pujada%
end
for i=I+1:l;
B(i-I,j)=A(i,j); %Baixada%
end
end
% correccions%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Pcorr(:,1)=P(:,3);
Bcorr(:,1)=B(:,3);
Pcorr(:,2)=Cal*(P(:,4)*M-(mq*IFQ))/mm;
Bcorr(:,2)=Cal*(B(:,4)*M-(mq*IFQ))/mm;
Pcorr(:,3)=(P(:,5)-((FQ*mq)/(mm+mq)))*Mcorr;
Bcorr(:,3)=(B(:,5)-((FQ*mq)/(mm+mq)))*Mcorr;
% plot(Pcorr(:,1),Pcorr(:,3))
% hold on
% plot(Bcorr(:,1),Bcorr(:,3))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
z(1)=v;
g=find(Pcorr(:,1)>=2.4e-7);
gg=min(g)
z(2)=Pcorr(gg,1);
z(3)=Pcorr(gg,2);
z(4)=Pcorr(gg,3);
r=find(Pcorr(:,1)>=9.5e-6)
rr=min(r)
z(5)=Pcorr(rr,1);
z(6)=Pcorr(rr,2)-Pcorr(gg,2);
z(7)=Pcorr(rr,3)-Pcorr(gg,3);
z(8)=Pcorr(rr,3)^2-Pcorr(gg,3)^2;
w(1)=v;
gb=find(Bcorr(:,1)>=2.4e-7)
ggb=max(gb)
w(2)=Bcorr(ggb,1);
w(3)=Bcorr(ggb,2);
w(4)=Bcorr(ggb,3);
rb=find(Bcorr(:,1)>=9.5e-6)
rrb=max(rb)
w(5)=Bcorr(rrb,1);
w(6)=Bcorr(rrb,2)-Bcorr(ggb,2);
w(7)=Bcorr(rrb,3)-Bcorr(ggb,3);
w(8)=Bcorr(rrb,3)^2-Bcorr(ggb,3)^2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
path = ['\Users\usuari\JoanTorrensSerra\recerca\matlab\frequenciamostra\Q1_sin_MT\'];
% v=input('vols gravar-ho? s/n: ','s')
% if v=='s'
% namep=[path,'p',arxiu];
% %nomesc=input('Nom fitxer pujada: ','s')
% dlmwrite(namep,Pcorr,'\t')
%
% %nomref=input('Nom fitxer baixada: ','s')
% nameb=[path,'b',arxiu];
% dlmwrite(nameb,Bcorr,'\t')
%
% namez=[path,'z',arxiu];
% dlmwrite(namez,z,'\t')
%
% namew=[path,'w',arxiu];
% dlmwrite(namew,w,'\t')
% else
end
Valora esta pregunta


0