MATLAB Answers


Import .txt data into CELL ARRAY

Asked by Philip
on 17 Sep 2018
Latest activity Commented on by Philip
on 25 Sep 2018
I have text files with arrays of data:
{ Centroid = [[1 0 1],[0 1 0]] Ages= [10 20 30],Times = [ 3:00, 3:05] }
->Exact example, text file includes enclosed brackets '{ }'
I need to import this data into a (cell array?) in MATLAB, so that I can call the various labels and access their data.


on 17 Sep 2018
What would the desired cell array look like?
on 17 Sep 2018
I don't have a particular idea, but some type of table in which I could call chunks of data.
{[0 1 1]}
{[2 1 3]}
Etc: I'm not super familiar with Tables in MATLAB

Sign in to comment.




1 Answer

Answer by Paolo
on 17 Sep 2018

Try something like this:
raw = fileread('mytextfile.txt');
[~,tok]=regexp(raw,'([A-Z][a-z]+).*?(\[.*?(?=[ ,][A-Z}]))','match','tokens');
tokens = [tok{:}];
varnames = tokens(1:2:end);
data = tokens(2:2:end);
1×3 table
Centroid Ages Times
___________________ ____________ _______________
'[[1 0 1],[0 1 0]]' '[10 20 30]' '[ 3:00, 3:05]'


on 18 Sep 2018
The second line of code is a regular expression. It can be used to match pattern in strings. In the regular expression, there are two capturing groups. Those are used to extract the name of the variable and the data itself.
Perhaps you can try the regex demo live here ( link)
Please note that I am assuming that this pattern is consistent across your entire text file.
on 20 Sep 2018
That's intense, thanks, I will have to play with it and lookup documentation to understand each component of this.
on 25 Sep 2018
Question on output: Can you now call specific parts from the table? How would you do that: example
answer = table('Ages',array[0])
(answer = 10)
Would it be better/easier to use textscan? Especially for text files that are just one big array of numbers?

Sign in to comment.