Effacer les filtres
Effacer les filtres

loading text file to matrix without delimiters

16 vues (au cours des 30 derniers jours)
Ammar
Ammar le 2 Avr 2014
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?

Réponse acceptée

Jos (10584)
Jos (10584) le 2 Avr 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

Plus de réponses (5)

Azzi Abdelmalek
Azzi Abdelmalek le 2 Avr 2014
d=importdata('file.txt')
  3 commentaires
Azzi Abdelmalek
Azzi Abdelmalek le 2 Avr 2014
This is not clear. Do you want to import numeric data or what? Post the four line of your file
Ammar
Ammar le 2 Avr 2014
I have attached an example file. There are 4 lines Each line has 250 characters (including spaces)
I want to turn this into a matrix with 250 columns and 4 rows

Connectez-vous pour commenter.


Image Analyst
Image Analyst le 2 Avr 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.

Ammar
Ammar le 2 Avr 2014
Thank you everybody!! I had been banging my head on the wall for a few hours on this item.

Joseph Cheng
Joseph Cheng le 2 Avr 2014
Modifié(e) : Joseph Cheng le 2 Avr 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

Ammar
Ammar le 3 Avr 2014
Modifié(e) : Ammar le 3 Avr 2014
Instead of putting one character per cell is there a way to specifcy which cell they go into?
For example, if I have text like the following
24359_435934009____________90909
where _=space
And I want to put it into a matrix such that
characters 1-5 go into column 1 (a.k.a 24359)
character 6 goes into column 2 (ak.a. NaN)
characters 7-10 goes into column 3
and so on....
  4 commentaires
Joseph Cheng
Joseph Cheng le 3 Avr 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
Azzi Abdelmalek le 4 Avr 2014
Ammar, this is considered as an answer, you can add comments by clicking on [comment on this answer]* or create a new question

Connectez-vous pour commenter.

Catégories

En savoir plus sur Data Import and Export dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by