Import .txt data into CELL ARRAY

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.

댓글 수: 2

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

댓글을 달려면 로그인하십시오.

답변 (1개)

Paolo
Paolo 2018년 9월 17일

0 개 추천

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);
cell2table(data,'VariableNames',varnames)
1×3 table
Centroid Ages Times
___________________ ____________ _______________
'[[1 0 1],[0 1 0]]' '[10 20 30]' '[ 3:00, 3:05]'

댓글 수: 6

Philip
Philip 2018년 9월 18일
편집: Philip 2018년 9월 18일
What is happening in that second row, can you explain?
[~,tok]=regexp(raw,'([A-Z][a-z]+).*?(\[.*?(?=[ ,][A-Z}]))','match','tokens');
Paolo
Paolo 2018년 9월 18일
I am happy to explain but before doing so can you just confirm that the output table is what you are after?
Philip
Philip 2018년 9월 18일
That would work fine, yes, as long as I can call those values.
Paolo
Paolo 2018년 9월 18일
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.
Philip
Philip 2018년 9월 20일
That's intense, thanks, I will have to play with it and lookup documentation to understand each component of this.
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?
Thanks!

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Text Data Preparation에 대해 자세히 알아보기

제품

릴리스

R2017b

질문:

2018년 9월 17일

댓글:

2018년 9월 25일

Community Treasure Hunt

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

Start Hunting!

Translated by