function out=MEscope2struct(filename)
% out=MEscope2struct(filename)
% konvertiert ASCII Daten von ME'scope in eine struct um diese in Matlab zu
% bearbeiten
% WICHTIG:	-in MEscope müssen die Residue Shapes als ASCII *.txt Datei
%            exportiert worden sein
%
% filename  :   vollständiger Dateipfad der zu konvertierenden Datei
%
% Neubert 05.2009

tmp = lower(filename);
k = findstr(tmp,'.txt');
if isempty(k)
    error('Dateityp ungültig. Es sind nur *.txt Dateien erlaubt.');
end

try
    fid = fopen(filename);
    if fid==-1
        error('Datei nicht gefunden.');
    end
    line = 0;
    ntitle = 0;

    while 1
        % bei eof wird -1 zurückgegeben
        tline = fgetl(fid);
        if ~ischar(tline), break, end

        line = line+1;
        data = [];    
        k = findstr(tline,char(09));    % nach TAB suchen, seperator bei MEscope Dateien
        % Anfang und Ende hinzufügen
        if isempty(k)
            k = [1 size(tline,2)];
        else
            k = [1 k size(tline,2)];
        end
        % Vektor mit Start und Ende des Datensatzes aufbauen 
        % bsp. [1 12 12 20] --> erster Datensatz von 1-12, zweiter
        % Datensatz von 12-20
        tmp=[];
        for i=1:size(k,2)-1
            tmp = [tmp k(1,i) k(i+1)];
        end
        k = tmp;  

        for i=1:size(k,2)/2
            if size(k,2)/2==1   % nur 1 Wert in Zeile
                ntitle = ntitle+1;
                title = ['line' num2str(ntitle)];
                if isempty(findstr(tline,'"'))
                    tmp(findstr(tmp,',')) = '.';
                    tmp=str2num(tline);
                else
                    tline(findstr(tline,'"')) = '';
                    tmp(findstr(tmp,char(09))) = '';
                    tmp = tline;
                end
                out.(title) = tmp;
            else
                if i==size(k,2)/2   % letzter Datensatz in Zeile
                    % überprüfen ob Zeichenkette oder Zahl und in
                    % Datencellarray schreiben
                    tmp = tline(k(2*i-1):k(2*i));
                    if isempty(findstr(tmp,'"'))
                        tmp(findstr(tmp,',')) = '.';
                        tmp = str2num(tmp);
                    else
                        tmp(findstr(tmp,'"')) = '';
                        tmp(findstr(tmp,char(09))) = '';
                    end                    
                    data{1,i-1} = tmp;                

                    fieldname = tline(k(1)+1:k(2)-2); % erster Datensatz ist Feldname
                    fieldname(findstr(fieldname,char(09)))='';
                    fieldname(findstr(fieldname,' ')) = '_';
                    fieldname(findstr(fieldname,':')) = '_';
                    out.(fieldname) = data;  
                elseif i~=1         % alles bis auf 1 Datensatz sind Daten 
                    % überprüfen ob Zeichenkette oder Zahl und in
                    % Datencellarray schreiben
                    tmp = tline(k(2*i-1):k(2*i));
                    tmp(findstr(tmp,char(09)))='';
                    if isempty(findstr(tmp,'"'))
                        tmp(findstr(tmp,',')) = '.';
                        tmp = str2num(tmp);
                    else
                        tmp(findstr(tmp,'"')) = '';
                        tmp(findstr(tmp,char(09))) = '';
                    end                    
                    data{1,i-1} = tmp;                
                end
            end
        end    
    end
    fclose(fid);
catch
    if fid~=-1
        fclose(fid);
        error('Es ist ein Fehler aufgetreten.');
    else
        error('Datei konnte nicht geladen werden.');
    end;
end
