Load text file with open braket ( )

Dear all,
I have a txt file in the format like:
(70.0362+32052.7j)
(-1.16529e-12+29239.2j)
(-1.42109e-13+26859.3j)
...
Then I used the following code:
fid = fopen('ImpedanceMatrix1.txt','r');
A = textscan(fid,'%s');
fclose(fid);
A = A{:};
However, it doesn't remove the brackets in the variable. Could you please suggest me how to do that. Thanks.

3 Comments

Stephen23
Stephen23 on 22 Mar 2018
Edited: Stephen23 on 22 Mar 2018
Why are you reading a file with numeric data using a string format? Why not just read the numeric data directly using a numeric format? Reading the data as a string and the post-processing (e.g. using regular expressions) is going to be quite inefficient.
Hi sir, I am not good at Matlab. I used Load before but it doesn't work. Could you please suggest which function that I could use? Thanks
Stephen23
Stephen23 on 22 Mar 2018
Edited: Stephen23 on 22 Mar 2018
@Shan Chu: I did not write that you should use a different function. I wrote that you should import numeric data using a numeric format, not a string format: these are clearly explained in the textscan documentation. Currently you use '%s', which imports data as a string (a char vector), but instead simply import your data using %f, which will be much more efficient than what you do now. Check my answer to see how simple this is.

Sign in to comment.

 Accepted Answer

Try this:
regexprep(A,{'(',')'},{'',''})

8 Comments

Thank you sir. it works perfectly
You are welcome.
Btw, I tried to use cell2mat to convert it to math type but it doesn't work. Could you please help?
Just simply
str2double(regexprep(A,{'(',')'},{'',''}))
I see, The type is string not double. Thanks sir
See my answer for a more efficient solution.
Yes, I saw as usual :)
But it is only a bit of more code in my case, of course your solution is more efficient.

Sign in to comment.

More Answers (1)

Stephen23
Stephen23 on 22 Mar 2018
Edited: Stephen23 on 22 Mar 2018
It is much more efficient to import the data using a numeric format (rather than as a string and doing post-processing as you are doing now). My test file is attached (you did not provide a sample file).
[fid,msg] = fopen('temp5.txt','rt');
assert(fid>=3,msg)
C = textscan(fid,'(%f)');
fclose(fid);
Giving:
>> C{1}
ans =
7.0036e+001 + 3.2053e+004i
-1.1653e-012 + 2.9239e+004i
-1.4211e-013 + 2.6859e+004i

Asked:

on 22 Mar 2018

Commented:

on 22 Mar 2018

Community Treasure Hunt

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

Start Hunting!