Azzera filtri
Azzera filtri

loading text file to matrix without delimiters

16 visualizzazioni (ultimi 30 giorni)
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?

Risposta accettata

Jos (10584)
Jos (10584) il 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

Più risposte (5)

Azzi Abdelmalek
Azzi Abdelmalek il 2 Apr 2014
d=importdata('file.txt')
  3 Commenti
Azzi Abdelmalek
Azzi Abdelmalek il 2 Apr 2014
This is not clear. Do you want to import numeric data or what? Post the four line of your file
Ammar
Ammar il 2 Apr 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

Accedi per commentare.


Image Analyst
Image Analyst il 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.

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

Joseph Cheng
Joseph Cheng il 2 Apr 2014
Modificato: Joseph Cheng il 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

Ammar
Ammar il 3 Apr 2014
Modificato: Ammar il 3 Apr 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 Commenti
Joseph Cheng
Joseph Cheng il 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
Azzi Abdelmalek il 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

Accedi per commentare.

Categorie

Scopri di più su Data Import and Export in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by