[あすかぜ・ねっと]あすかぜ・ねっと自作ソフトCassava > サポート掲示板

Cassava Editor サポート掲示板

スレッド一覧に戻る
題名:
名前:
この名前を次回も使用する


スレッド一覧に戻る返信

[646] 一行目のセルから文字の抽出

よしみつ [2021/11/05 10:53:43]

いつもお世話になっております。

一つのセルの中に下記のようにサイズ表が入っています。
サイズは2つだったり1つだけだったりします。

----------------------------
○○○○○○○○○
○○○○○○○○○
幅: 20 cm
高さ: 19 cm
長さ: 95 cm
重さ: 10 kg
○○○○○○○○○○○○○○
○○○○○○○○○
幅: 22 cm
高さ: 50 cm
長さ: 36 cm
重さ: 0.8 kg
○○○○○○○○○
----------------------------
○○○○○○○○○
○○○○○○○○○
幅: 5 cm
高さ: 19 cm
重さ: 1.5 kg
○○○○○○○○○○○○○○
----------------------------

これを下記のように右隣のセルにそれぞれ抽出してコピーできますでしょうか。




幅: 20 cm | 高さ: 19 cm | 長さ: 95 cm | 重さ: 10 kg | 幅: 22 cm | 高さ: 50 cm | 長さ: 36 cm | 重さ: 0.8 kg

幅: 5 cm | 高さ: 19 cm | 重さ: 1.5 kg



過去記事
https://www.asukaze.net/soft/cassava/bbs/index.cgi?t=557&r=2
こちらを参考に下記のようにしてみましたが、うまくいきませんでした。

根本的に間違っているかもしれません。ご教示願えませんでしょうか。
何卒よろしくお願いいたします。


-----------------------------------
function getMinPos(s, c1, c2, c3, c4) {
p1 = pos(s, c1);
p2 = pos(s, c2);
p3 = pos(s, c3);
p4 = pos(s, c4);
if (p1 == 0) {
return p2;
}
if (p2 == 0) {
return p3;
}
if (p3 == 0) {
return p4;
}
if (p4 == 0) {
return p1;
}
return min(p1, p2, p3, p4);
}

for (y = 1; y <= Bottom; y++) {
s = [1,y];
for (x = 2; true; x++) {
p = getMinPos(s, "幅:", "高さ:", "長さ:", "重さ:");
if (p == 0) {
break;
}
s = mid(s, p);

p = getMinPos(s, "m", "m", "m", "g");
if (p == 0) {
break;
}
[x,y] = left(s, p);
s = mid(s, p - 1);
}
}
-----------------------------------

Re: [646] 一行目のセルから文字の抽出

あすかぜ [2021/11/05 20:43:45]

こんな感じでしょうか。
https://www.asukaze.net/soft/cassava/macro/asukaze/bbs646_20211105.cms

文字列が見つからなかった場合の処理を簡単にするため、見つからなかった場合に 0 ではなく len(s) + 1 を使うように変更しました。
また、見つかった文字列を保存するために result という変数を追加し、最後にまとめて [2,y] に設定するようにしました。

ためしてみてください。

Re: [646] 一行目のセルから文字の抽出

よしみつ [2021/11/06 00:54:50]

ありがとうございます。
想定通りに稼働してくれました。助かります!

スレッド一覧に戻る返信