function [error] = readAsciiSample( hMainFig, filename, type ) % [error] = readAsciiSample( hMainFig, filename, type ) % Function to read Bucket data in ASCII format. % % Input % ----- % hMainFig ........... Handel to the main user interface % filename ........... Data filename % type ............... type of data : btl, ext % % Output % ------ % error .............. 1: OK - -1 : an error occured % % $Id$ error = 1; % 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 = 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 ) tsg.(Para) = char( c{1}(2) ); end end end % Build 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 parameters are read in %d % ------------------------------------------------------------- format = '%d %d %d %d %d %d'; for i = 7 : nHeader if isempty( strfind(char(header(i)), 'TYPE')) && ... isempty( strfind( char(header(i)), 'BOTTLE') ) && ... isempty( strfind( char(header(i)), 'ANALDATE') ); format = [format ' %f']; else format = [format ' %s']; end end % Read the data in a cell % ----------------------- cellData = textscan( fid, format ); % Convert cell to a structure % --------------------------- s = cell2struct(cellData, header, 2); % Close the file % -------------- fclose( fid ); clear cellData % Test if at least one variable (SSPS or SSTP) exists. If one is missing % create the array filled with NaN % ---------------------------------------------------------------------- if isempty(strmatch('SSTP_EXT',header)) && isempty(strmatch('SSPS_EXT',header)) error = -1; return; end if isempty(strmatch('SSTP_EXT',header)) && ~isempty(strmatch('SSPS_EXT',header)) s.SSTP_EXT = NaN * ones( size( s.SSPS_EXT ) ); header = [header; 'SSTP_EXT']; end if isempty(strmatch('SSPS_EXT',header)) && ~isempty(strmatch('SSTP_EXT',header)) s.SSPS_EXT = NaN * ones( size( s.SSTP_EXT ) ); header = [header; 'SSPS_EXT']; end % Test if the fiels _TYPE, _QC; _ANALDATE (for SSPS) exists for the variables % If they don't create them % --------------------------------------------------------------------------- PARA = {'SSPS_EXT'; 'SSTP_EXT' }; for i = 1:2 para = PARA{i}; if isempty( strmatch([para '_TYPE'], header)) label = 'UNKN'; s.([para '_TYPE']) = label( ones(length(s.(para)),1), :); header = [header; [para '_TYPE']]; end if isempty( strmatch([para '_QC'], header)) s.([para '_QC']) = int8(NO_CONTROL) * int8(ones( size( s.(para) ))); header = [header; [para '_QC']]; end if isempty(strmatch([para '_ANALDATE'], header)) && strcmp(para, 'SSPS_EXT') label = '19500101000000'; s.([para '_ANALDATE']) = label( ones(length(s.(para)),1), :); header = [header; [para '_ANALDATE']]; end if isempty(strmatch([para '_BOTTLE'], header)) && strcmp(para, 'SSPS_EXT') label = '0'; s.([para '_BOTTLE']) = label( ones(length(s.(para)),1), :); header = [header; [para '_BOTTLE']]; end end % 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))) ); s.DAYD_EXT = datenum(yy, mm, dd, hh, mi, ss); % Convert date in character. This cannot be done using % the Matlab Serial Date format as there can be % some loss of precision. % The following instruction is not precise enough : % s.DATE_EXT = datestr( s.DAYD_EXT, 'yyyymmddHHMMSS' ); % ------------------------------------------------------ yy = num2str( s.(char(header(1))), '%4d' ); mm = num2str( s.(char(header(2))), '%02d' ); dd = num2str( s.(char(header(3))), '%02d' ); hh = num2str( s.(char(header(4))), '%02d' ); mi = num2str( s.(char(header(5))), '%02d' ); ss = num2str( s.(char(header(6))), '%02d' ); s.DATE_EXT = [yy mm dd hh mi ss]; % Check if bottle/ship colocation is OK % ------------------------------------- compDateLocBtlShip( hMainFig, s ); % Transfer the 's' structure to the 'tsg' structure % ------------------------------------------------- error = concatSample( hMainFig, s ); if error tsg.report.([ lower(type) 'file']) = filename; end % Display time to read file on console % ------------------------------------ t = toc; fprintf('...done (%6.2f sec).\n\n',t); end