textから小数点を​含む数値を取り出すに​はどうすればよいでし​ょうか

16 Ansichten (letzte 30 Tage)
Dai
Dai am 31 Jul. 2022
Kommentiert: Dai am 1 Aug. 2022
SVGのファイルをfilereadを用いてtextに変換し、そこから座標情報を取り出したいのですが、上手くいきません。
extract(Text, digitsPattern) を用いると、小数点は数値として認識されないようで、38.24が38と24として取り出されてしまいます。
とりあえず整数部分と小数部分に分けて取り出し、行列をreshapeを用いて上手く並べた後、num2doubleで数値にし、足し合わせることも検討しましたが、
小数点以下が.00の数値ですと、text上、小数点以下は表示されない、つまり、17.00は17と表示されるため、これもまたうまくreshapeできず解決しません。
以下に、
A=fileread(filename.svg)
extractbetween(A,'文字列','文字列')を使用して抽出したテキストをTextの中に入れた後からのコードを示しますのでよろしくお願いいたします。
Text内には
<rect x="1628.79" y="2086.67" class="st4" width="39.69" height="39.69"/>
<rect x="1631.63" y="2121.57" class="st4" width="39.69" height="39.69"/>
<rect x="1646.75" y="2193.81" class="st4" width="39.69" height="39.69"/>
<rect x="1729" y="2333.73" class="st4" width="39.69" height="39.69"/>
<rect x="1551.15" y="1804.36" class="st4" width="39.69" height="39.69"/>
<rect x="1384.64" y="1235.46" class="st4" width="39.69" height="39.69"/>
<rect x="1720.75" y="772.62" class="st4" width="39.69" height="39.69"/>
が入っています
Text
NumC = extract(Text,digitsPattern);
NumV = str2double(NumC);
これだと、
NumC =
[1628 79 2086 67...
と返ってきてしまい、また、4行目の最も左の値が整数であるために、NumVをreshapeすることも困難です
何か解決策はありますか
  1 Kommentar
Atsushi Ueno
Atsushi Ueno am 31 Jul. 2022
下記に質問に対する回答をさせて頂きましたが、SVGファイルのフォーマットはXMLなので、XMLパーサで抽出すればもっと楽に、かつパラメータ名を含めて識別し構造体に読み込む事が出来るので良いと思います。

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Atsushi Ueno
Atsushi Ueno am 31 Jul. 2022
二重引用符で囲まれた小数点数(または整数)をパターンにして抽出してみました。
二重引用符も含めて抽出した後で削除していますが、正規表現の「先/後読み」が出来ればこの必要はなくなります。
Text = "<rect x=""1628.79"" y=""2086.67"" class=""st4"" width=""39.69"" height=""39.69""/>" + ...
"<rect x=""1631.63"" y=""2121.57"" class=""st4"" width=""39.69"" height=""39.69""/>" + ...
"<rect x=""1646.75"" y=""2193.81"" class=""st4"" width=""39.69"" height=""39.69""/>" + ...
"<rect x=""1729"" y=""2333.73"" class=""st4"" width=""39.69"" height=""39.69""/>" + ...
"<rect x=""1551.15"" y=""1804.36"" class=""st4"" width=""39.69"" height=""39.69""/>" + ...
"<rect x=""1384.64"" y=""1235.46"" class=""st4"" width=""39.69"" height=""39.69""/>" + ...
"<rect x=""1720.75"" y=""772.62"" class=""st4"" width=""39.69"" height=""39.69""/>";
floatdigitsPattern = """" + digitsPattern + asManyOfPattern("." + digitsPattern) + """";
NumC = extract(Text,floatdigitsPattern);
NumV = str2double(erase(NumC,""""));
reshape(NumV,4,[])'
ans = 7×4
1.0e+03 * 1.6288 2.0867 0.0397 0.0397 1.6316 2.1216 0.0397 0.0397 1.6467 2.1938 0.0397 0.0397 1.7290 2.3337 0.0397 0.0397 1.5512 1.8044 0.0397 0.0397 1.3846 1.2355 0.0397 0.0397 1.7208 0.7726 0.0397 0.0397
  1 Kommentar
Dai
Dai am 1 Aug. 2022
無事解決いたしました。
ありがとうございます。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu MATLAB finden Sie in Help Center und File Exchange

Produkte


Version

R2022a

Community Treasure Hunt

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

Start Hunting!