% nacteni a dekodovani celeho souboru pac.dbf do matice znaku a hodnot
% obsahuje anamnezy pacientu 1-141

%% Pocatecni smazani pracovniho adresare "data mtlab" a jeho opetovne
%vytvoreni
clear all
close all
clc
load('path.mat');
fprintf('||| Dekodovani souboru AVG.DBF ||| \n');
fprintf('Vytvoren prazdny pracovni adresar "%s" \n',PathName2);
%% Nacteni souboru
[FileName1, PathName] = uigetfile( ...
    { '*.DBF', 'Pacient anamnesis database file (*.DBF)'; ...
      '*.*', 'All files (*.*)'}, ...
      'Select an anamnesis database file');
if isequal(FileName1,0)
    %... pokud user zvolil cancel ... preruseni behu programu
    fprintf('Uzivatel zvolil Cancel \n')
    clear all
    else
       fprintf('Zvolen soubor: \n "%s" \n',fullfile(PathName,FileName1));
    %... pokracovani programu 
    fid = fopen([PathName, FileName1]); %nacte file id
    c = fread(fid); %nacte soubor v dec po adresach do jednoho sloupce
    c = c(hex2dec('4C3'):end); %18720 znaku (/130=144 zaznamu)
    %% Rozkodovani souboru PAC.DBF
    %jeden retezec je dlouhy 130 znaku
    if exist(fullfile(PathName2,FileName1),'file')  %smaze existujici soubor, pokud existuje
        delete(fullfile(PathName2,FileName1));
        fprintf('Puvodni soubor %s byl smazan. \n',FileName1);
    end 

    fprintf('Provadi se dekodovani souboru: \n "%s%s" \nTato akce muze chvili trvat ... \n',PathName,FileName1);
    x = 0; procent_10 = round(length(c)/130/10); %pomocna pro vypocet hotovych %
    db_anam_znak=[]; znak = 1;
    for index1 = 1:(length(c)/130) 
        if index1 == (x*procent_10/10) || index1 == 1 %vypocet a zobrazeni hotovych %
            fprintf(1,'Hotovo %d%% \n',x)
            x = x + 10;
        end
        db_anam_znak(index1,:) = c(znak:znak+129);   %rozdeleni retezcu do radku
        znak = znak + 130;
    end
   
    db_anam_znak = char(db_anam_znak); %prevedeni radku zdnaku na retezce
    %vytvoreni indexove tabulky ID_pacienta pro vyhledavaci ucely v souboru
    %DB_AVG.mat
    ID_pacienta=[];
    for index1 = 1:length(db_anam_znak)
        ID_pacienta(index1,1) = str2double(db_anam_znak(index1,1:3));
    end

    %% vytvoreni ciselne db
    %db_avg_cisl hodnot z string pole zaznamu, fmin,fmax,A,D,PI
    polozka = 1; db_anamneza=[];
    for index = 1:length(ID_pacienta)
        db_anamneza{index}.ID = str2double(db_anam_znak(index,1:3));              %ID pacienta 
        db_anamneza{index}.Prijmeni = db_anam_znak(index,4:18);       %Prijmeni
        db_anamneza{index}.Jmeno = db_anam_znak(index,19:33);         %Jmeno
        db_anamneza{index}.RodCislo = db_anam_znak(index,34:43);      %Rodne cislo
        db_anamneza{index}.Datum_nar = db_anam_znak(index,44:51);     %Datum narozeni
        db_anamneza{index}.Vek = str2double(db_anam_znak(index,52:54));           %Vek
        db_anamneza{index}.Vyska = str2double(db_anam_znak(index,55:57));         %Vyska 
        db_anamneza{index}.Vaha = str2double(db_anam_znak(index,58:60));          %Vaha
        db_anamneza{index}.Pohlavi = db_anam_znak(index,61);          %Pohlavi
        db_anamneza{index}.Datum_mer = db_anam_znak(index,62:69);     %Datum mereni
        db_anamneza{index}.Diabetes = db_anam_znak(index,70);         %Priznak diabetu
        db_anamneza{index}.Diabetes_let = str2double(db_anam_znak(index,71:72));  %Pocet let trvani diabetu 
        db_anamneza{index}.Hypertenze = db_anam_znak(index,73);       %Priznak hypertenze
        db_anamneza{index}.Hypertenze_let = str2double(db_anam_znak(index,74:75));%Pocet let trvani hypertenze
        db_anamneza{index}.Geneticka_zatez = db_anam_znak(index,76);  %Priznak geneticke zateze
        db_anamneza{index}.Cevni_oper = db_anam_znak(index,77);       %Cevni operace
        db_anamneza{index}.Srdecni_nemoc = db_anam_znak(index,78);    %Srdecni onemocneni
        db_anamneza{index}.Angina_pect = db_anam_znak(index,79);      %Priznak anginy pectoris
        db_anamneza{index}.Varixy = db_anam_znak(index,80);           %Priznak varixu
        db_anamneza{index}.Koureni = db_anam_znak(index,81);          %Koureni
        db_anamneza{index}.Koureni_let = str2double(db_anam_znak(index,82:83));   %Pocet let koureni
        db_anamneza{index}.Koureni_denne = str2double(db_anam_znak(index,84:86)); %Koureni denne
        db_anamneza{index}.Klaudikace_sin = db_anam_znak(index,87);   %Klaudikacni potize leva
        db_anamneza{index}.Klaudikace_sin_vzd = str2double(db_anam_znak(index,88:89));%Klaudikacni vzdalenost leva (metry)
        db_anamneza{index}.Klaudikace_dx = db_anam_znak(index,91);    %Klaudikacni potize prava
        db_anamneza{index}.Klaudikace_dx_vzd = str2double(db_anam_znak(index,92:94));%Klaudikacni vzdalenost prava (metry)
        db_anamneza{index}.Stenoza_sin = str2double(db_anam_znak(index,95:97));   %Stenoza leva 
        db_anamneza{index}.Stenoza_dx = str2double(db_anam_znak(index,98:100));   %Stenoza prava
        db_anamneza{index}.TK_AB = str2double(db_anam_znak(index,101:103));       %Krevni tlak na pazi
        db_anamneza{index}.TK_AP_dx = str2double(db_anam_znak(index,104:106));    %Krevni tlak na AP prava
        db_anamneza{index}.TK_ATP_dx = str2double(db_anam_znak(index,107:109));   %Krevni tlak na ATP prava
        db_anamneza{index}.TK_ATA_dx = str2double(db_anam_znak(index,110:112));   %Krevni tlak na ATA prava
        db_anamneza{index}.TK_AP_sin = str2double(db_anam_znak(index,113:115));   %Krevni tlak na AP leva
        db_anamneza{index}.TK_ATP_sin = str2double(db_anam_znak(index,116:118));  %Krevni tlak na ATP leva
        db_anamneza{index}.TK_ATA_sin = str2double(db_anam_znak(index,119:121));  %Krevni tlak na ATA leva
        db_anamneza{index}.Teplota_dx = str2double(db_anam_znak(index,122:125));  %Merena teplota prava
        db_anamneza{index}.Teplota_sin = str2double(db_anam_znak(index,126:129)); %Merena teplota leva
    end
    
    %% Ulozeni vytvoreneho souboru do zvoleneho adresare
    fprintf('\n')
    [filename, pathname] = uiputfile('DB_AVG.mat','Save Mat-file');
    if isequal(filename,0) || isequal(pathname,0)
        fprintf('Uzivatel zvolil Storno. Soubor ulozen v: \n "...%s" \n',fullfile(PathName2,FileName2))
        save(fullfile(PathName2,FileName2), '-append','db_anamneza');
    else
        fprintf('Vytvoren soubor: \n %s%s \n',pathname,filename);
    %ulozeni vytvorenych dat do souboru DB_AVG.mat (prevedeni souboru DB.AVG do mat fileu)
        save(fullfile(pathname, filename), '-append','db_anamneza');
    end
    % soubor DB_AVG.mat obsahuje ...
    % ciselne vyjadreni parametru fmax,fmin,A,D,T0,PI -     db_avg_cisl
    % kompletni udaje zaznamu vcetne ID pacienta            db_avg
    % NOVE anamnezy pacientu                                db_anamneza
    save(('path.mat'), '-append','FileName1');
    clear all;
end %konecny END celeho programu pokud byl vybran soubor