필터 지우기
필터 지우기

Help parsing a string

조회 수: 3 (최근 30일)
Russell Senior
Russell Senior 2020년 5월 8일
댓글: Ameer Hamza 2020년 5월 11일
I need some help parsing a char array, hopefully someone has an idea. Matlab loads my table and the table header is not matlab compliant, so it creats a char array that is a property of the table column, and I need to parse that to get the proper table header name.
One of the char arrays is Original column heading: '(name='/mandySimulation_1/clock/simulationTime' type='DOUBLE' quantity='TIME' unit='s')'
So I need to create 4 variables, name, type, quantity, and unit. Each should have the subsequent value per the string. I tried using sscanf, but I can't figure out how to use it. Any suggestsion? I would like the name to keep the "/" characters because I will parse those later. It's a little easier because the / can be a delimiter.
The char arrays I'm working with are not the same length, but they always have the name, type, quantity, and unit variable name. Here is an example of another char array:
Original column heading: '(name='/mandySimulation_1/engine_1/longBlock_1/shortBlock_1/cylinderBlockAssembly_1/cylinder_1/ringLeakage_1/referenceDiameter' type='DOUBLE' quantity='LENGTH' unit='m')'
Thanks in advance for any help you can give.

채택된 답변

Ameer Hamza
Ameer Hamza 2020년 5월 8일
편집: Ameer Hamza 2020년 5월 8일
Try this
str = "Original column heading: '(name='/mandySimulation_1/clock/simulationTime' type='DOUBLE' quantity='TIME' unit='s')'";
name = regexp(str, '=''([^\s''.]*)''', 'tokens');
Result
>> name{1}
ans =
"/mandySimulation_1/clock/simulationTime"
>> name{2}
ans =
"DOUBLE"
>> name{3}
ans =
"TIME"
>> name{4}
ans =
"s"
It will work, as long as the strings are in the specified format.
  댓글 수: 6
Russell Senior
Russell Senior 2020년 5월 11일
Thanks so much! I hope wherever you are working, they are paying you well!
One minor correction:
S(i).(match{j}(1)) = match{j}(2);
Should be
S(i).(match{j}{1}) = match{j}{2};
Then it works 100% perfect. Nicely done, and thanks again!
Ameer Hamza
Ameer Hamza 2020년 5월 11일
I am glad to be of help. Thanks for your kind remarks :)
In R2020a, both match{j}(1) and match{j}{1} works. Maybe this is something related to MATLAB releases.

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Migrate GUIDE Apps에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by