Is MATLAB is automatically concatenating data from a text file?
1 view (last 30 days)
Show older comments
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 Comments
Accepted Answer
Cedric
on 13 May 2013
Edited: Cedric
on 13 May 2013
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 Comments
Cedric
on 14 May 2013
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.
More Answers (1)
David Sanchez
on 13 May 2013
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 Comments
See Also
Categories
Find more on Startup and Shutdown in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!