%% Import data from text file. % Script for importing data from the following text file: % % /Pfad/AEB 2.txt % % To extend the code to different selected data or a different text file, % generate a function instead of a script. % Auto-generated by MATLAB on 2017/08/23 14:50:32 %% Initialize variables. filename = '/Users/Lennart/Dropbox/Masterarbeit/batch/fertig/AEB 2.txt'; delimiter = ','; %% Read columns of data as text: % For more information, see the TEXTSCAN documentation. formatSpec = '%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%[^\n\r]'; %% Open the text file. fileID = fopen(filename,'r'); %% Read columns of data according to the format. % This call is based on the structure of the file used to generate this % code. If an error occurs for a different file, try regenerating the code % from the Import Tool. dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'ReturnOnError', false); %% Close the text file. fclose(fileID); %% Convert the contents of columns containing numeric text to numbers. % Replace non-numeric text with NaN. raw = repmat({''},length(dataArray{1}),length(dataArray)-1); for col=1:length(dataArray)-1 raw(1:length(dataArray{col}),col) = dataArray{col}; end numericData = NaN(size(dataArray{1},1),size(dataArray,2)); for col=[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104] % Converts text in the input cell array to numbers. Replaced non-numeric % text with NaN. rawData = dataArray{col}; for row=1:size(rawData, 1); % Create a regular expression to detect and remove non-numeric prefixes and % suffixes. regexstr = '(?.*?)(?([-]*(\d+[\,]*)+[\.]{0,1}\d*[eEdD]{0,1}[-+]*\d*[i]{0,1})|([-]*(\d+[\,]*)*[\.]{1,1}\d+[eEdD]{0,1}[-+]*\d*[i]{0,1}))(?.*)'; try result = regexp(rawData{row}, regexstr, 'names'); numbers = result.numbers; % Detected commas in non-thousand locations. invalidThousandsSeparator = false; if any(numbers==','); thousandsRegExp = '^\d+?(\,\d{3})*\.{0,1}\d*$'; if isempty(regexp(numbers, thousandsRegExp, 'once')); numbers = NaN; invalidThousandsSeparator = true; end end % Convert numeric text to numbers. if ~invalidThousandsSeparator; numbers = textscan(strrep(numbers, ',', ''), '%f'); numericData(row, col) = numbers{1}; raw{row, col} = numbers{1}; end catch me end end end dateFormats = {'dd.mm.yyyy', 'HH:mm:ss'}; dateFormatIndex = 1; blankDates = cell(1,size(raw,2)); anyBlankDates = false(size(raw,1),1); invalidDates = cell(1,size(raw,2)); anyInvalidDates = false(size(raw,1),1); for col=[1,2]% Convert the contents of columns with dates to MATLAB datetimes using the specified date format. try dates{col} = datetime(dataArray{col}, 'Format', dateFormats{col==[1,2]}, 'InputFormat', dateFormats{col==[1,2]}); %#ok catch try % Handle dates surrounded by quotes dataArray{col} = cellfun(@(x) x(2:end-1), dataArray{col}, 'UniformOutput', false); dates{col} = datetime(dataArray{col}, 'Format', dateFormats{col==[1,2]}, 'InputFormat', dateFormats{col==[1,2]}); %%#ok catch dates{col} = repmat(datetime([NaN NaN NaN]), size(dataArray{col})); %#ok end end dateFormatIndex = dateFormatIndex + 1; blankDates{col} = cellfun(@isempty, dataArray{col}); anyBlankDates = blankDates{col} | anyBlankDates; invalidDates{col} = isnan(dates{col}.Hour) - blankDates{col}; anyInvalidDates = invalidDates{col} | anyInvalidDates; end dates = dates(:,[1,2]); blankDates = blankDates(:,[1,2]); invalidDates = invalidDates(:,[1,2]); %% Split data into numeric and cell columns. rawNumericColumns = raw(:, [3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104]); %% Replace non-numeric cells with NaN R = cellfun(@(x) ~isnumeric(x) && ~islogical(x),rawNumericColumns); % Find non-numeric cells rawNumericColumns(R) = {NaN}; % Replace non-numeric cells %% Create output variable AEB2 = table; AEB2.VarName1 = dates{:, 1}; AEB2.VarName2 = dates{:, 2}; AEB2.VarName3 = cell2mat(rawNumericColumns(:, 1)); AEB2.VarName4 = cell2mat(rawNumericColumns(:, 2)); AEB2.VarName5 = cell2mat(rawNumericColumns(:, 3)); AEB2.VarName6 = cell2mat(rawNumericColumns(:, 4)); AEB2.VarName7 = cell2mat(rawNumericColumns(:, 5)); AEB2.VarName8 = cell2mat(rawNumericColumns(:, 6)); AEB2.VarName9 = cell2mat(rawNumericColumns(:, 7)); AEB2.VarName10 = cell2mat(rawNumericColumns(:, 8)); AEB2.VarName11 = cell2mat(rawNumericColumns(:, 9)); AEB2.VarName12 = cell2mat(rawNumericColumns(:, 10)); AEB2.VarName13 = cell2mat(rawNumericColumns(:, 11)); AEB2.VarName14 = cell2mat(rawNumericColumns(:, 12)); AEB2.VarName15 = cell2mat(rawNumericColumns(:, 13)); AEB2.VarName16 = cell2mat(rawNumericColumns(:, 14)); AEB2.VarName17 = cell2mat(rawNumericColumns(:, 15)); AEB2.VarName18 = cell2mat(rawNumericColumns(:, 16)); AEB2.VarName19 = cell2mat(rawNumericColumns(:, 17)); AEB2.VarName20 = cell2mat(rawNumericColumns(:, 18)); AEB2.VarName21 = cell2mat(rawNumericColumns(:, 19)); AEB2.VarName22 = cell2mat(rawNumericColumns(:, 20)); AEB2.VarName23 = cell2mat(rawNumericColumns(:, 21)); AEB2.VarName24 = cell2mat(rawNumericColumns(:, 22)); AEB2.VarName25 = cell2mat(rawNumericColumns(:, 23)); AEB2.VarName26 = cell2mat(rawNumericColumns(:, 24)); AEB2.VarName27 = cell2mat(rawNumericColumns(:, 25)); AEB2.VarName28 = cell2mat(rawNumericColumns(:, 26)); AEB2.VarName29 = cell2mat(rawNumericColumns(:, 27)); AEB2.VarName30 = cell2mat(rawNumericColumns(:, 28)); AEB2.VarName31 = cell2mat(rawNumericColumns(:, 29)); AEB2.VarName32 = cell2mat(rawNumericColumns(:, 30)); AEB2.VarName33 = cell2mat(rawNumericColumns(:, 31)); AEB2.VarName34 = cell2mat(rawNumericColumns(:, 32)); AEB2.VarName35 = cell2mat(rawNumericColumns(:, 33)); AEB2.VarName36 = cell2mat(rawNumericColumns(:, 34)); AEB2.VarName37 = cell2mat(rawNumericColumns(:, 35)); AEB2.VarName38 = cell2mat(rawNumericColumns(:, 36)); AEB2.VarName39 = cell2mat(rawNumericColumns(:, 37)); AEB2.VarName40 = cell2mat(rawNumericColumns(:, 38)); AEB2.VarName41 = cell2mat(rawNumericColumns(:, 39)); AEB2.VarName42 = cell2mat(rawNumericColumns(:, 40)); AEB2.VarName43 = cell2mat(rawNumericColumns(:, 41)); AEB2.VarName44 = cell2mat(rawNumericColumns(:, 42)); AEB2.VarName45 = cell2mat(rawNumericColumns(:, 43)); AEB2.VarName46 = cell2mat(rawNumericColumns(:, 44)); AEB2.VarName47 = cell2mat(rawNumericColumns(:, 45)); AEB2.VarName48 = cell2mat(rawNumericColumns(:, 46)); AEB2.VarName49 = cell2mat(rawNumericColumns(:, 47)); AEB2.VarName50 = cell2mat(rawNumericColumns(:, 48)); AEB2.VarName51 = cell2mat(rawNumericColumns(:, 49)); AEB2.VarName52 = cell2mat(rawNumericColumns(:, 50)); AEB2.VarName53 = cell2mat(rawNumericColumns(:, 51)); AEB2.VarName54 = cell2mat(rawNumericColumns(:, 52)); AEB2.VarName55 = cell2mat(rawNumericColumns(:, 53)); AEB2.VarName56 = cell2mat(rawNumericColumns(:, 54)); AEB2.VarName57 = cell2mat(rawNumericColumns(:, 55)); AEB2.VarName58 = cell2mat(rawNumericColumns(:, 56)); AEB2.VarName59 = cell2mat(rawNumericColumns(:, 57)); AEB2.VarName60 = cell2mat(rawNumericColumns(:, 58)); AEB2.VarName61 = cell2mat(rawNumericColumns(:, 59)); AEB2.VarName62 = cell2mat(rawNumericColumns(:, 60)); AEB2.VarName63 = cell2mat(rawNumericColumns(:, 61)); AEB2.VarName64 = cell2mat(rawNumericColumns(:, 62)); AEB2.VarName65 = cell2mat(rawNumericColumns(:, 63)); AEB2.VarName66 = cell2mat(rawNumericColumns(:, 64)); AEB2.VarName67 = cell2mat(rawNumericColumns(:, 65)); AEB2.VarName68 = cell2mat(rawNumericColumns(:, 66)); AEB2.VarName69 = cell2mat(rawNumericColumns(:, 67)); AEB2.VarName70 = cell2mat(rawNumericColumns(:, 68)); AEB2.VarName71 = cell2mat(rawNumericColumns(:, 69)); AEB2.VarName72 = cell2mat(rawNumericColumns(:, 70)); AEB2.VarName73 = cell2mat(rawNumericColumns(:, 71)); AEB2.VarName74 = cell2mat(rawNumericColumns(:, 72)); AEB2.VarName75 = cell2mat(rawNumericColumns(:, 73)); AEB2.VarName76 = cell2mat(rawNumericColumns(:, 74)); AEB2.VarName77 = cell2mat(rawNumericColumns(:, 75)); AEB2.VarName78 = cell2mat(rawNumericColumns(:, 76)); AEB2.VarName79 = cell2mat(rawNumericColumns(:, 77)); AEB2.VarName80 = cell2mat(rawNumericColumns(:, 78)); AEB2.VarName81 = cell2mat(rawNumericColumns(:, 79)); AEB2.VarName82 = cell2mat(rawNumericColumns(:, 80)); AEB2.VarName83 = cell2mat(rawNumericColumns(:, 81)); AEB2.VarName84 = cell2mat(rawNumericColumns(:, 82)); AEB2.VarName85 = cell2mat(rawNumericColumns(:, 83)); AEB2.VarName86 = cell2mat(rawNumericColumns(:, 84)); AEB2.VarName87 = cell2mat(rawNumericColumns(:, 85)); AEB2.VarName88 = cell2mat(rawNumericColumns(:, 86)); AEB2.VarName89 = cell2mat(rawNumericColumns(:, 87)); AEB2.VarName90 = cell2mat(rawNumericColumns(:, 88)); AEB2.VarName91 = cell2mat(rawNumericColumns(:, 89)); AEB2.VarName92 = cell2mat(rawNumericColumns(:, 90)); AEB2.VarName93 = cell2mat(rawNumericColumns(:, 91)); AEB2.VarName94 = cell2mat(rawNumericColumns(:, 92)); AEB2.VarName95 = cell2mat(rawNumericColumns(:, 93)); AEB2.VarName96 = cell2mat(rawNumericColumns(:, 94)); AEB2.VarName97 = cell2mat(rawNumericColumns(:, 95)); AEB2.VarName98 = cell2mat(rawNumericColumns(:, 96)); AEB2.VarName99 = cell2mat(rawNumericColumns(:, 97)); AEB2.VarName100 = cell2mat(rawNumericColumns(:, 98)); AEB2.VarName101 = cell2mat(rawNumericColumns(:, 99)); AEB2.VarName102 = cell2mat(rawNumericColumns(:, 100)); AEB2.VarName103 = cell2mat(rawNumericColumns(:, 101)); AEB2.VarName104 = cell2mat(rawNumericColumns(:, 102)); % For code requiring serial dates (datenum) instead of datetime, uncomment % the following line(s) below to return the imported dates as datenum(s). % AEB2.VarName1=datenum(AEB2.VarName1); % AEB2.VarName2=datenum(AEB2.VarName2); %% Clear temporary variables clearvars filename delimiter formatSpec fileID dataArray ans raw col numericData rawData row regexstr result numbers invalidThousandsSeparator thousandsRegExp me dateFormats dateFormatIndex dates blankDates anyBlankDates invalidDates anyInvalidDates rawNumericColumns R;