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