MATLAB: Fgetl skipping empty lines and text lines

datafgetlimportdatamatrixwhile loop

So i have some data with unknown number of lines. They contain the numbers 1 or -1, text or empty lines. How do i fgetl to obtain only the numbers(no empty lines and text lines) to store into a matrix? say for example my data is
1 1 -1 1 1 -1
1 -1 1 1 -1 1
sdasr
-1 1 1 1 -1 -1
where — is an empty line, what should my loop look like using a while loop to extract just the 1s and -1s into the matrix in the correct row and column they come in? I am thinking about using a while loop to fgetl all the lines but don't know what condition to use. Thanks
NB: Edited using {}Code to reflect actual file format — dpb

Best Answer

No looping needed...as long as the numeric values are regular (ie, same number of columns each record) as shown.
>> c=textread('alex.dat','%s','delimiter','\n','whitespace','') % sample file
c =
'1 1 -1 1 1 -1'
'1 -1 1 1 -1 1'
''
'sdasr'
'-1 1 1 1 -1 -1 '
>> A=str2num(char(c(~cellfun(@(x) all(isletter(x)),c))))
A =
1 1 -1 1 1 -1
1 -1 1 1 -1 1
-1 1 1 1 -1 -1
>>
ADDENDUM
Above will fail if the string happens to have any digits in it; more robust would be two steps; first remove blank lines and then use any instead of all for the alpha test.
isstrprop might turn out useful here, too...
ADDENDUM 2 :)
IF were going to use a loop and fgetl here, I'd do it more like--
A=[]; % allocate accumulator array
while ~feof(fid)
try
A=[A;str2num(fgetl(fid))];
catch
end
end
Related Question