How to parse variables independent of order

1 visualizzazione (ultimi 30 giorni)
I am currently opening a file and parsing arguments in the following way:
ReadParam = 'h0 = %f f0 = %f';
fid = fopen(file);
params = textscan(fid, readParam, 'Delimiter', '\n');
fclose(fid);
h0 = params{1};
f0 = params{2};
disp(h0);
disp(f0);
However, this method assumes a specific order to h0 and f0, by the way readParam and params are defined. How would I parse the argument in such a way that order doesn't matter? This is because in "file", they can be switched (and there are more variables, this is just an example). Thanks!
  6 Commenti
g
g il 16 Nov 2018
One parameter per line, no parameter name repeats.
as for delimiters, I’m not sure what that means, but the current scheme is what I have above.
thanks!
g
g il 16 Nov 2018
Assumimg my data is of this form:
a = 2
b = 3
How would I create a structure/parse this?

Accedi per commentare.

Risposta accettata

Stephen23
Stephen23 il 16 Nov 2018
Modificato: Stephen23 il 16 Nov 2018
It would help most if you uploaded a sample file, so we have something to work with. But here is a simple working example of how to read a file matching your description (you did not upload a sample data file, so I had to create my own test file (attached)) and convert its contents into a structure. Then the order of the contents is irrelevant:
fmt = '%s%f';
opt = {'Delimiter','='};
[fid,msg] = fopen('temp2.txt','rt');
assert(fid>=3,msg)
C = textscan(fid,fmt,opt{:});
fclose(fid);
D = [strtrim(C{1}),num2cell(C{2})].';
S = struct(D{:});
Giving:
>> S.h0
ans = 1.2300
>> S.f0
ans = 4.5600
>> S.z
ans = 6.7890

Più risposte (0)

Categorie

Scopri di più su Data Type Conversion in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by