function [error] = readAsciiTsg( hMainFig, filename ) % Function to read TSG data in ASCII format. % % Input % ----- % hMainFig ........... Handel to the main user interface % filename ........... Data filename % type ............... Can read 3 types of data : WS, EXT, TSG % % Output % ------ % error .............. 1: OK - -1 : an error occured % Get the data from the application GUI % ------------------------------------- tsg = getappdata( hMainFig, 'tsg_data'); % Get the fieldnames of tsg structure % ----------------------------------- tsgNames = fieldnames(tsg); nbFieldNames = length( tsgNames ); % Get NO_CONTROL code value % ------------------------- NO_CONTROL = get(tsg.qc.hash, 'NO_CONTROL', 'code'); % Display read file info on console % --------------------------------- fprintf('\nREAD_ASCII_FILE\n'); tic; % Open the file % ------------- fid = fopen( filename, 'rt' ); % Check file % ----------- if fid == -1 msg_error = ['TSG_GOSUD file_lecture : Open file error : ' filename]; warndlg( msg_error, 'ASCII error dialog'); sprintf('...cannot locate %s\n', filename); error = -1; return; end % Display more info about read file on console % -------------------------------------------- fprintf('...reading %s : ', filename); % Read the header till the header line has been read % -------------------------------------------------- OK = 0; while ~OK % Read every line % --------------- line = fgetl( fid ); c = textscan( line, '%s'); switch char( c{1}(1) ) case '%HEADER' % Read the header then quit the while loop % ---------------------------------------- header = c{1}(2:end); nHeader = length( header ); OK = 1; otherwise % Get the parameter Name (Delete '%') % ---------------------------------- Para = char( strtok(c{1}(1), '%') ); % Read the parameter value % ------------------------ ind = strmatch( Para, tsgNames); if ~isempty( ind ) % patch added for composed name % ----------------------------- a = c{1}(2:end)'; str=[]; for i=a str = sprintf('%s %s', str, char(i)); end % copy to tsg struct & remove leading and trailing white space % ------------------------------------------------------------ tsg.(Para) = strtrim(str); end end end % Builld the format depending on the header parameters % 1 - Decimate the HEADER - The 7th first parameters are always % %HEADER YEAR MNTH DAYX hh mm ss % 2 - The 6 Date and time parametes are read in %d % ------------------------------------------------------------- format = '%d %d %d %d %d %d'; for i = 7 : nHeader format = [format ' %f']; end % Read the data in a cell % ----------------------- cellData = textscan( fid, format ); % Convert cell to a structure % --------------------------- s = cell2struct(cellData, header, 2); clear cellData % Date (y m d h m s) in the first 6 elements in data % -------------------------------------------------- yy = double( s.(char(header(1))) ); mm = double( s.(char(header(2))) ); dd = double( s.(char(header(3))) ); hh = double( s.(char(header(4))) ); mi = double( s.(char(header(5))) ); ss = double( s.(char(header(6))) ); tsg.report.tsgfile = filename; tsg.DAYD = datenum(yy, mm, dd, hh, mi, ss); tsg.DATE = datestr( tsg.DAYD, 'yyyymmddHHMMSS' ); nHeader = length( header ); for i = 7 : nHeader % QC should be converted in int8 % ---------------------------------- if ~isempty( strfind(char(header(i)), '_QC')) tsg.(char(header(i))) = int8(s.(char(header(i)))); else tsg.(char(header(i))) = s.(char(header(i))); end end % populate tsg.file structure % --------------------------- [tsg.file.pathstr, tsg.file.name, tsg.file.ext, tsg.file.versn] = ... fileparts(filename); % Perform somme automatic tests % ----------------------------- automaticQC( hMainFig ); tsg.file.type = 'ASCII'; % Save the data in the application GUI % ------------------------------------ setappdata( hMainFig, 'tsg_data', tsg ); % Close the file % -------------- fclose( fid ); % Display time to read file on console % ------------------------------------ t = toc; fprintf('...done (%6.2f sec).\n\n',t); % Everything OK % ------------- error = 1; end