Grep a numeric array from a text file

조회 수: 4 (최근 30일)
fsgeek
fsgeek 2017년 8월 18일
댓글: fsgeek 2017년 8월 18일
Dear all,
I have a text file which contains numeric data enclosed with square brackets and parentheses. The data delimiter is a comma. The contents of the file look like this:
[(1, 2, 3), (4, 5, 6, 7), (8, 9)]
The values themselves are arbitrary; I chose ascending integers for convenience. The length of each set of values enclosed by parentheses is arbitrary and could be different every time the file is written. The parentheses always enclose at least one value.
I would like to read the text file so that I get an array like this:
values =
1 2 3 4 5 6 7 8 9
whos values
Name Size Bytes Class Attributes
values 1x9 72 double
So far, I have loaded the text file so that I have a structure containing the text data. I am having trouble converting the data to an array, but I'm guessing that I need regexp().
This is what I've tried:
fileName = sprintf('..\data.dat', pwd);
data= importdata(fileName, ',');
data= cell2mat(data);
% Arrange the sub (node) IDs
values = regexp(data, '), (', 'split');
This does something vaguely close to what I need, but it's not correct. I have searched the forums but can't find anything similar to this text format.
Any help would be greatly appreciated, thanks!
Best regards,
Louis Vallance
  댓글 수: 2
Stephen23
Stephen23 2017년 8월 18일
What do you expect this to do?:
sprintf('..\data.dat', pwd);
fsgeek
fsgeek 2017년 8월 18일
Oops, that was a typo :) I don't have a problem opening the file so that line can be ignored.

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

채택된 답변

Stephen23
Stephen23 2017년 8월 18일
편집: Stephen23 2017년 8월 18일
>> str = '[(1, 2, 3), (4, 5, 6, 7), (8, 9)]';
>> str2double(regexp(str,'\d+','match'))
ans =
1 2 3 4 5 6 7 8 9
and to read the data from the file you could simply use fileread:
str = fileread(...)

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 File Operations에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by