function [D,P,E]=importer(archivo,modelo,limites) t=cputime; home HW=waitbar(1,'Progreso de carga del archivo actual:'); disp('Cargando diccionario y creando matriz de posibilidades.') %------------------Carga del diccionario--------------------------------- [currentdic,inutil]=importdic(modelo); [Ndic,inutil]=size(currentdic{1}); %------------------------------------------------------------------------ %------------------Reconocimiento de formato----------------------------- fid = fopen(archivo); principio = textscan(fid,'%c',9); fclose(fid); if strcmp(principio{1}(1),'"') if strcmp(principio{1}(8),'"') corrupto=0; separador=principio{1}(9); else corrupto=1; separador=principio{1}(8); end else corrupto=0; separador=principio{1}(7); end %------------------------------------------------------------------------ %------------------C Vector de cadenas----------------------------------- fid = fopen(archivo); if corrupto==0 C = textscan(fid,'%s',300000,'Delimiter','\r'); else C = textscan(fid,'%q',300000,'Delimiter','\r'); end fclose(fid); C=C{1}; [M,inutil]=size(C); %donde M es el número de segundos grabados %------------------------------------------------------------------------ %------------------F Matriz de cadenas----------------------------------- % principio = textscan(C{1},'%c',9); % separador=principio{1}(9); F(1) = textscan(C{1},'%q',15000,'Delimiter',separador); %se escanea la primera [nparam,inutil]=size(F{1}); %linea para ver el número %de parámetros for i=2:M waitbar(0.2*i/M); F(i) = textscan(C{i},'%q',nparam,'Delimiter',separador); [checkparam,inutil]=size(F{i}); %chequeo de num de param para completar for w=nparam:-1:(checkparam+1) a=F{i}; %en caso de varios separadores al final es necesario a{w}=''; %completar con espacios vacios en la matriz F F{i}=a; end end % assignin('base','C',C); % assignin('base','F',F); N=nparam; %donde N es el número de parámetros grabados %------------------------------------------------------------------------ % D=F; % E=F; % P=F; %--------------------Matriz de posibilidades P -------------------------- P=cell(N,5); for r=1:N P{r,1}=F{1}(r); %Columna 1 son los nombres de las variables (extraido de los datos) P{r,2}=cual(currentdic{2},Ndic,P{r,1});%Columna 2 es la posición en el diccionario de cada variable if P{r,2}~=0 cad=currentdic{7}(P{r,2}); %cadena de posibilidades separadas por barras cad=cad{1}; posibilidades=textscan(cad,'%s',20,'Delimiter','/'); [O,inutil]=size(posibilidades{1}); if O>1 P{r,3}=posibilidades{1}; %Columna 3 de P es un array con las posibilidades P{r,5}=0; %la variable r no es numérica else P{r,3}='Número'; P{r,5}=1; %la variable r es numérica end P{r,4}=O; %La 4ª columna de la matriz P es el número de posib. else disp('¡Atención, variable no reconocida!'); % r end end %assignin('base','P',P); %------------------------------------------------------------------------ %---------------Creación de la matriz de trabajo D (numérica)------------ Mmin=limites(1); Mmax=limites(2); if Mmax==0; Mmax=M-1; end if Mmin==0 Mmin=1; end duracion=Mmax-Mmin+1; D=zeros(duracion+1,N); E=zeros(duracion+1,N); %matriz de errores: %es un 1 donde no se reconoce la cadena for j=1:N D(1,j)=P{j,2}; if P{j,2}==0 E(1,j)=1; else home procesandovariable=P{j,1}; procesandovariable=procesandovariable{1}; disp(['Procesando: ',procesandovariable]); waitbar(0.2+0.8*j/N); for k=Mmin+1:Mmax+1 if P{j,5} D(k-Mmin+1,j)=str2double(F{k}(j)); else D(k-Mmin+1,j)=cual(P{j,3},P{j,4},F{k}(j)); if D(k-Mmin,j)==0 %la función cual devuelve 0 en caso de no reconocer E(k-Mmin,j)=1; end end end end end %------------------------------------------------------------------------ %assignin('base','E',E); err=sum(sum(E)); if err>0 disp([num2str(err),' errores de coincidencia. Se recogen como 0 en la matriz D.']); else disp('No se han encontrado errores de coincidencia.'); end t=cputime-t; disp(['Tiempo de cálculo: ',num2str(t),' segundos.']); close(HW);