loading text file to matrix without delimiters
7 views (last 30 days)
Show older comments
I have a text file dataset with Y number of lines and each line has exactly 250 characters (including spaces).
I want to put each character (even if it is a space) into a matrix so I create a matrix with 250 columns and Y rows. We can replace the spaces with NaN.
I have been playing with textscan and few other functions but cannot seem to get it. Anyone have any ideas?
0 Comments
Accepted Answer
Jos (10584)
on 2 Apr 2014
So each digit is a single value, and spaces are to be replaced with NaN …
M = char(textread('example.txt','%s','delimiter','')) - '0' ;
M(M==(' '-'0')) = NaN ; % replaces spaces with NaN's
% M is now a 4-b-250 numerical array
btw the second line of example.txt is 251 characters long
0 Comments
More Answers (5)
Azzi Abdelmalek
on 2 Apr 2014
d=importdata('file.txt')
3 Comments
Azzi Abdelmalek
on 2 Apr 2014
This is not clear. Do you want to import numeric data or what? Post the four line of your file
Image Analyst
on 2 Apr 2014
When I saved your example it didn't have exactly 250 characters on every line. I had 251 in the second line for some reason and the last line had only 1 character. So I made the code a little more robust than you might need it, but extra robustness never hurts.
fid = fopen('example.txt');
tline = fgetl(fid);
lineCounter = 1;
charArray = tline;
fprintf('%d characters in line #%d: %s\n', length(tline), lineCounter, tline)
while ischar(tline)
tline = fgetl(fid);
if length(tline) < 3
continue;
end
fprintf('%d characters in line #%d: %s\n', length(tline), lineCounter, tline)
charArray = [charArray; tline(1:250)];
lineCounter = lineCounter + 1;
end
fclose(fid);
% Display in command window.
charArray
Of course you can get rid of the display lines (fprintf, etc.) if you want.
0 Comments
Joseph Cheng
on 2 Apr 2014
Edited: Joseph Cheng
on 2 Apr 2014
simple method
fid = fopen('example.txt','r');
line = fgetl(fid);
spaces = strfind(line,' ');
line(spaces)=0;
x=line(:);
y=hex2dec(x)';
y(spaces)=NaN;
this is just an example but given the line of text use strfind(line,' ') to find the spaces. Note these indexes to be replaced by NaNs, make the spaces 0 and transpose it to a 250x1 array such that hex2dec will convert each into a number, then replace the index of the found spaces to NaN.
I used hex2dec as i noticed in your example you have a 'C' in there. So unless it was a typo its a hex number? if it is a typo then just use str2num or str2double instead
0 Comments
Ammar
on 3 Apr 2014
Edited: Ammar
on 3 Apr 2014
4 Comments
Joseph Cheng
on 3 Apr 2014
use my method i had and modify it.
fid = fopen('example.txt','r');
line = fgetl(fid);
spaces = strfind(line,' ');
spaces = [0 spaces length(line)+1];
cellpos = 1;
for i=1:length(spaces)-1
portion = line(spaces(i):spaces(i+1)-1);
if portion ==' '
blah{cellpos}=NaN;
else
blah{cellps}=portion;
end
Azzi Abdelmalek
on 4 Apr 2014
Ammar, this is considered as an answer, you can add comments by clicking on [comment on this answer]* or create a new question
See Also
Categories
Find more on Data Import and Export in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!