teg_read
Simple reader for tab-delimited ASCII files of (mostly) numeric values that's a little more robust than dlmread.
Updated 31 - 07 - 2013. Very simple detection for whether there's a header-line with variable names.
Updated 19 - 10 - 2014. Rewritten to use regexp.
function [D, varnames, vn2c] = teg_read2(fn) skiplines = 0; varnames = {}; fid = fopen(fn, 'r'); l{1} = fgetl(fid); l{2} = fgetl(fid); words{1} = regexp(l{1}, '\t', 'split'); words{2} = regexp(l{2}, '\t', 'split'); fclose(fid); N = [0 0]; nNum = [0 0]; for n = 1:2, for m = 1:length(words{n}), x = str2num(words{n}{m}); if ~isempty(x), nNum(n) = nNum(n) + 1; end; N(n) = N(n) + 1; end; end; r = nNum ./ N; if r(1) < 0.5 * r(2), varnames = words{1}; for ivn = 1:length(varnames), f = strfind(varnames{ivn}, '"'); varnames{ivn}(f) = []; f = strfind(varnames{ivn}, '$'); varnames{ivn}(f) = []; end; skiplines = 1; end; fid = fopen(fn, 'r'); D = []; for n = 1:skiplines, l0 = fgetl(fid); end; while ~feof(fid), l0 = fgetl(fid); words = regexp(l0, '\t', 'split'); tmp = []; for iw = 1:length(words), val = str2num(words{iw}); if isempty(val), val = NaN; end; tmp = [tmp val]; end; D = [D; tmp]; end; fclose(fid); vn2c = struct; for n = 1:length(varnames), vn2c = setfield(vn2c, varnames{n}, n); end;