Is MATLAB is automatically concatenating data from a text file?
1 回表示 (過去 30 日間)
古いコメントを表示
I have an input line of text that looks like this:
Band ID: 0 AD ID: 43 Scan ID: 0 LRT/HRT: 0 Valid Flag: 0
I’ m using the following regexp command to split the string;
Data = regexp(LineText,’ +’,’split’);
Actual output:
Band ID: 0AD ID: 43Scan ID: 0LRT/HRT: 0Valid Flag: 0
Expected output:
Band ID: 0 AD ID: 43 Scan ID: 0 LRT/HRT: 0 Valid Flag: 0
Where all numerical values are in there own cell. Also note that if the tabs that occur after each number are only spacs, I get the required result.
I don’t believe I’ve seen the regexp function behave in this manner. Is this a case where regexp is choking on the tabs in the text file? Or is my regexp too generic?
0 件のコメント
採用された回答
Cedric
2013 年 5 月 13 日
編集済み: Cedric
2013 年 5 月 13 日
What are you trying to achieve, extract the numbers? The space in the pattern ' +' won't match tabs actually, but '\s+' would (match spaces, tabs, any "white space"). If your goal were to extract numbers, you could go for
>> match = regexp(LineText,'\d+','match') ;
>> num = str2double(match)
num =
0 43 0 0 0
If you had a whole file with this structure, you could process it in one shot instead of line by line (for the example, I repeated several times this LineText that you provided and just incremented the AD value)..
>> buffer = fileread('brad.txt') ;
>> num = str2double(regexp(buffer,'\d+','match')) ;
>> num = reshape(num, 5, []).'
num =
0 43 0 0 0
0 44 0 0 0
0 45 0 0 0
0 46 0 0 0
and you could use more elaborate patterns if numbers were not integers, e.g. '[\d\.-]+' for matching positive and negative floating points as well.
2 件のコメント
Cedric
2013 年 5 月 14 日
You're welcome Brad. I think that we all have still have always something to learn about these regexp to be honest ;-) I could not recommend enough the official doc actually if you want to learn; it is one of the best documents that I have seen about them, in the sens that it is quite concise, yet very explicit with examples and it covers a lot of material quite well. You can find it there:
Take the document called Programming Fundamentals in the MATLAB section, on pages 2-26 to 2-85.
その他の回答 (1 件)
David Sanchez
2013 年 5 月 13 日
Is this what you want?
s='Band ID: 0 AD ID: 43 Scan ID: 0 LRT/HRT: 0 Valid Flag: 0';
data= regexp(s,'\t','split')
you will end up with an cell containing the data string.
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Startup and Shutdown についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!