function [Indice] = Buscar_Indice(lat_a_buscar, redondeo, lat_index_dat_file)

%% ---------------------------------------------------------------------------------
% Version:      24/09/2015    
% (c):          Vicente Calabuig Simón
%               vicasim@etsid.upv.es
%
% 1.- Utilidad:
%
%       Dentro de una base de datos ordenada por latitudes, con un fichero de índices asociado, 
%       buscar el índice de posición de la latitud 'lat_a_buscar'.
%
%       NOTA   : El fichero de índices asociados es LatIndex_3_12_13.dat
%       NOTA 2 : No existen radioayudas en todos los grados de latitud. Ver fichero LatNOindex_3_12_13
%
% 2.- Parámetros de entrada:
%
%       lat_a_buscar : Latitud cuyo indice de posicion se desea buscar  (num)
%                      Debe ser un número entero entre -90 y +90
%
%       redondeo : Sirve para los casos en que el grado de latitud a buscar no tenga
%                  índice asignado:
%           
%                   redondeo = 0  --> Se sustituye el grado sin índice por el MENOR más 
%                                     próximo con índice 
%
%                   redondeo = 1  --> Se sustituye el grado sin índice por el MAYOR más 
%                                     próximo con índice
%
%       lat_index_dat_file : Fichero .dat con la relación de índices de posición de la base de datos
%                            en la que se quiere buscar.
%
% 3.- Parámetros de salida:
%    
%       Indice     :   Indice de posición en LatIndex_3_12_13.dat correspondiente a la latitud lat_a_buscar
%
% 4.- Ejemplo de uso:
%
%      [Indice] = Buscar_Indice(45, 0, 'LatIndex_3_12_13.dat')      45 tiene índice de posición asignado
%      [Indice] = Buscar_Indice(-47, 0, 'LatIndex_3_12_13.dat')     -47 NO tiene índice de posición asignado
%      [Indice] = Buscar_Indice(-47, 1, 'LatIndex_3_12_13.dat')
%             
%% --------------------------------------------------------------------------------------------------------
fileID   = fopen(lat_index_dat_file);
Indice   = 0;
Lat_a_buscar_string = num2str(lat_a_buscar);

% Comprobamos si el grado de latitud buscado tiene o no asignado un índice:
% Almacenamos en memoria las relaciones de asignación con tipo cell:
[LatIndex_3_12_13] = Reading_Database(lat_index_dat_file, 1, 133);
[LatNOindex_3_12_13] = Reading_Database('LatNOindex_3_12_13.dat', 1, 48);

% Convertimos las relaciones de asignación a arrays:
LatIndex_3_12_13_Array =[];
LatNOindex_3_12_13_Array =[];
for i = 1: 133
    LatIndex_3_12_13_Array =[LatIndex_3_12_13_Array ; str2num(LatIndex_3_12_13{i})];
end
for i = 1: 48
    LatNOindex_3_12_13_Array =[LatNOindex_3_12_13_Array ; str2num(LatNOindex_3_12_13{i})];
end
% Comparamos  el grado a buscar con todos los que no tienen índice asignado:
Out = 0;
for i = 1 : 48
    if (lat_a_buscar == LatNOindex_3_12_13_Array(i))
        fprintf('El grado de latitud %g no tiene índice de posición asignado\n', lat_a_buscar);
        % Redondeo hacia abajo
        if (redondeo == 0)
            for j = 1 : 133
                if (LatIndex_3_12_13_Array(end - j, 1) < LatNOindex_3_12_13_Array(i) )
                    lat_a_buscar = LatIndex_3_12_13_Array(end - j, 1);
                    Lat_a_buscar_string = num2str(lat_a_buscar);
                    out = 1;
                    break;
                end
            end
            fprintf('El grado de latitud MENOR, con asignación,  más próximo es %g', lat_a_buscar)
            if (out == 1) 
                break;
            end
        end
        % Redondeo hacia arriba
        if (redondeo == 1)
            for j = 1 : 133
                if (LatIndex_3_12_13_Array(j, 1) > LatNOindex_3_12_13_Array(i) )
                    lat_a_buscar = LatIndex_3_12_13_Array(j, 1);
                    Lat_a_buscar_string = num2str(lat_a_buscar);
                    out = 1;
                    break;
                end
            end
            fprintf('El grado de latitud MAYOR, con asignación, más próximo es %g', lat_a_buscar)
            if (out == 1) 
                break;
            end
        end
    end
end

while (1)
    %Leemos las filas por completo:             Ej:  -89 1
    CompleteString         =   fgetl(fileID);
    %Buscamos donde está el espacio en la fila leída:
    BlankOrNot = isspace(CompleteString);
    BlankPos   = 1;
    while (1)
        if BlankOrNot(BlankPos)
            BlankPos = BlankPos;
            break
        else
            BlankPos = BlankPos + 1;
        end
    end
    %Ahora ya podemos diferenciar los dos elementos (grado, índice de posición) de cada fila
    lat_i                  =   CompleteString(1:BlankPos);
    lat_i                  =   lat_i(~isspace(lat_i));
    Indice_i               =   CompleteString(BlankPos:end);
    Indice_i               =   Indice_i(~isspace(Indice_i));
    if  strcmp(Lat_a_buscar_string, lat_i)
        [Indice] = Indice_i;
        Indice   = str2num(Indice);
        break;
    end
end