0

char 配列に文字列のリストがあります。

'gvs(0.000000000000000e+000, 1.601985139535780e+002)'
'gvs(-5.000000000000000e-005, 1.365231866954370e+002)'
'gvs(-1.000000000000000e-004, 1.169431404340180e+002)'
'gvs(-5.000000000000000e-004, 3.187711314514890e+001)'
'gvs(-2.000000000000000e-004, 8.589930648472340e+001)'

数字だけの配列に変換しようとしているのですが(gv、コンマ、括弧は無視して)、何が間違っているのかよくわかりませんか?

cols = length(Variables) + length(Parameters);
% currently unused
rows = length(Results);

for a = 1:rows;
    Res(a,:) = sscanf ((Results{a,1}(1,:)),'%*s %f %f');
end

textscan も試しましたが、正しく動作しません

for a = 1:rows;
    Res = cell (textscan ((Results{a,1}(1,:)),'%*s %f %f','Delimiter', {'(',' '},'MultipleDelimsAsOne',1));
end

どんな助けでも大歓迎です!

ありがとう

4

3 に答える 3

2

char配列 (セル文字列ではない)があると仮定します。

s = ['gvs( 0.000000000000000e+000, 1.601985139535780e+002)'
     'gvs(-5.000000000000000e-005, 1.365231866954370e+002)'
     'gvs(-1.000000000000000e-004, 1.169431404340180e+002)'
     'gvs(-5.000000000000000e-004, 3.187711314514890e+001)'
     'gvs(-2.000000000000000e-004, 8.589930648472340e+001)']

次に、次のことが簡単にできますtextscan()

data = textscan(s','gvs(%f%f)','CollectOutput',1,'Delimiter',',');
data = data{1}
data =
         0  160.1985
   -0.0001  136.5232
   -0.0001  116.9431
   -0.0005   31.8771
   -0.0002   85.8993

scellstringの場合、textscanを呼び出す前に、次のように変換しchar()ます。

s = char(s);
于 2013-07-11T11:05:37.983 に答える
2

Replace

Res(a,:) = sscanf ((Results{a,1}(1,:)),'%*s %f %f');

with

Res(a,:) = sscanf ((Results{a,1}(1,:)),'gvs(%f, %f)');
于 2013-07-11T11:06:38.187 に答える
0

文字列がほぼ MATLAB 配列と互換性のある形式であることを考慮すると、sin をコミットして以下を使用できますevalc

>> s = {
    'gvs( 0.000000000000000e+000, 1.601985139535780e+002)'
    'gvs(-5.000000000000000e-005, 1.365231866954370e+002)'
    'gvs(-1.000000000000000e-004, 1.169431404340180e+002)'
    'gvs(-5.000000000000000e-004, 3.187711314514890e+001)'
    'gvs(-2.000000000000000e-004, 8.589930648472340e+001)'};

>> C = evalc(['[' regexprep([s{:}], {'gvs\(' '\)'}, {'' ';'}) ']'])

ans =
                         0    1.601985139535780e+002
   -5.000000000000000e-005    1.365231866954370e+002
   -1.000000000000000e-004    1.169431404340180e+002
   -5.000000000000000e-004    3.187711314514890e+001
   -2.000000000000000e-004    8.589930648472340e+001
于 2013-07-11T11:26:59.340 に答える