Read data from .txt with regexp

28 ビュー (過去 30 日間)
Aurea94
Aurea94 2022 年 3 月 29 日
コメント済み: Rik 2022 年 4 月 18 日
I want to load numeric data from a .txt file, which contains both string a numeric and contains non standard arranging. I am attaching an example file for you to see.
The data is divided in sections, but all the numeric data I am interested in have the same structure: '->' + 'some string' + ':' + 'numeric value with format %.4f' (Lines in the .txt not containing the desired expression should not be considered).
I tested different manners of doing so, with readfile, testscan etc., however due to the complexitu of the input file I could not reach my objective.
I think the most appropiate way to try to solve the problem is by using regexp and properly telling matlab which is the expression it has to look for in the .txt file.
I am not familarised with regexp and cannot properly understand how to code the proper expression for me to work, and would greatly appreaicate any help with that.
Thank you very much!
============================================================================
| DATA VALUES FOR INPUT VARIABLES |
============================================================================
Model: Example
(data file produced by on 29-Mar-2022 17:30:14)
============================================================================
FIRST DATA SECTION:
============================================================================
-> z [val]: 13.0000
-> m [in mm]: 3.0000
-> Type [str]: Ball
-> c_s [valval]: 0 0 0
----------------------------------------------------------------------------
SECOND DATA SECTION:
============================================================================
-> r_b [strandnumber]: C50
-> s0_r [in mm]: 0.0000
-> I_r [val]: 15.0000
-> Only text line
----------------------------------------------------------------------------
THIRD DATA SECTION:
============================================================================
-> Values found = 0.
----------------------------------------------------------------------------
FOURTH DATA SECTION:
============================================================================
-> n_1 [val_1]: 1.0000
  5 件のコメント
Aurea94
Aurea94 2022 年 3 月 30 日
Yes that was really really fantastic!!
Rik
Rik 2022 年 3 月 30 日
For basic data like this, even JSON should be preferred. Just about every half-decent programming language can read it. Composing matrices is a bit tricky, but as long as you stick to scalars or vectors everything should be fine.

サインインしてコメントする。

採用された回答

Stephen23
Stephen23 2022 年 3 月 29 日
編集済み: Stephen23 2022 年 3 月 29 日
rgx = '^\s*->\s*(\w+)\s*\[[\w\s]+\]:\s*([^\r\n]+)';
str = fileread('ExampleTextFile.txt');
tkn = regexp(str,rgx,'tokens','lineanchors');
tkn = vertcat(tkn{:})
tkn = 8×2 cell array
{'z' } {'13.0000'} {'m' } {'3.0000' } {'Type'} {'Ball' } {'c_s' } {'0 0 0' } {'r_b' } {'C50' } {'s0_r'} {'0.0000' } {'I_r' } {'15.0000'} {'n_1' } {'1.0000' }
vec = str2double(tkn(:,2));
idx = ~isnan(vec);
tkn(idx,2) = num2cell(vec(idx))
tkn = 8×2 cell array
{'z' } {[ 13]} {'m' } {[ 3]} {'Type'} {'Ball' } {'c_s' } {'0 0 0'} {'r_b' } {'C50' } {'s0_r'} {[ 0]} {'I_r' } {[ 15]} {'n_1' } {[ 1]}
out = cell2struct(tkn(:,2),tkn(:,1),1)
out = struct with fields:
z: 13 m: 3 Type: 'Ball' c_s: '0 0 0' r_b: 'C50' s0_r: 0 I_r: 15 n_1: 1
  4 件のコメント
Md Kamrul Hasan Ikbal
Md Kamrul Hasan Ikbal 2022 年 4 月 18 日
@Stephen; Can I get your email. I need a favour from you.
Rik
Rik 2022 年 4 月 18 日
I expect your chances would be much better if you posted your request as a separate question and post the link here. People tend to be protective of their inbox.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeString Parsing についてさらに検索

製品


リリース

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by