Take string input and reformat as cell array
조회 수: 2 (최근 30일)
이전 댓글 표시
I would like to convert a string into a cell array. Here is a small example of string:
[{"ts": "2018-07-03T06:30:07", "v": 1.0}, {"ts": "2018-07-03T06:30:12", "v": 0.0}, {"ts": "2018-07-03T08:41:06", "v": 1.0}]
I would like to convert this into the following format:
[ datetime ] [number]
The ts and v refer to timestamp and value, and are not important to keep.
I believe using the textscan is an efficient way to do it, however I cannot figure out how to use it properly, any help is appreciated!
댓글 수: 2
Stephen23
2020년 6월 10일
@Connor Brackley: please upload a sample of your data by clicking the paperclip button.
채택된 답변
Stephen23
2020년 6월 10일
편집: Stephen23
2020년 6월 10일
>> str = fileread('SampleData.txt');
>> str = regexprep(str,{'",','[":{}\[\]]+'},{' ',''});
>> fmt = '%*s%{yyyy-MM-dd''T''HHmmss}D%*s%f';
>> out = textscan(str,fmt,'EndOfLine',',');
Checking the output:
>> out{1}
ans =
2018-07-01T101102
2018-07-01T101107
2018-07-01T101109
2018-07-01T101114
2018-07-01T101120
2018-07-01T101125
etc.
댓글 수: 2
Stephen23
2020년 6월 10일
Do you have any control over the file format?
If it was possible to change the character between each set of {...} (e.g. to ';' or similar) then it would be possible to use textscan directly on the file itself, which would likely be much faster.
추가 답변 (1개)
Ameer Hamza
2020년 6월 10일
편집: Ameer Hamza
2020년 6월 10일
Try this
str = fileread('test.txt');
dts = regexp(str, '"ts": "([0-9:T-]*)"', 'tokens');
vs = regexp(str, '"v": ([0-9.]*)', 'tokens');
dts = cellfun(@(x) datetime(x, 'InputFormat', 'yyyy-MM-dd''T''HH:mm:ss'), [dts{:}]);
vs = cellfun(@str2double, [vs{:}]);
T = table(dts.', vs.', 'VariableNames', {'DateTime', 'V'});
disp(T)
Result
DateTime V
____________________ _
03-Jul-2018 06:30:07 1
03-Jul-2018 06:30:12 0
03-Jul-2018 08:41:06 1
참고 항목
카테고리
Help Center 및 File Exchange에서 Data Type Conversion에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!