function [data, headerText] = load_ascii(filename,delimiter,header,nlines,offset)
% load data from ascii file
% inputs:
% filename: absolute or relative file path
% header: number of lines for header (defaults to 0)
% nlines: number of lines to read in (defaults to inf)
% offset: number of lines to skip (defaults to 0) (assumes data is
% written with a fixed field width. If this is not the
% case, offset option will not work.
% delimiter: delimiter in ascii file (defaults to tab)
%
% outputs:
% data: matrix of data in file
% headerText: text of header as specified by header input
% initialize some things
if nargin<3, header = 0;end
if nargin<4, nlines = inf;end
if nargin<5, offset = 0;end
if nargin<2, delimiter = '\t';end
fid = fopen(filename);
headerCell = cell(header,1);
for i=1:header
headerCell{i} = fgets(fid);
end
headerText = char(headerCell);
% First line of Data...
fline = fgets(fid);
% determine number of columns
delKey = double(sprintf(delimiter));
ncols = sum(fline == delKey)+1;
% determine number of bytes per line
bytesPerLine = length(fline);
% skip offset
fseek(fid,bytesPerLine*(offset-1),0);
% read data and keep native format
d = fread(fid,bytesPerLine*nlines,'char=>char');
%convert format to matrix
format = ['%f' delimiter];
if ~strcmp(delimiter,'\t'),format = repmat(['%f' delimiter],1,ncols);format = format(1:end-1);end
data = sscanf(d,format,[ncols,nlines])';
fclose(fid);
end