初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2017-05-19 17:34:41

msro
Member

取得したHTMLソースの任意の文字列の後ろを抜き出し、フィールドに設定したい。

ショッピングサイトの検索結果からHTMLソース取得し、
任意の文字列の後ろの文字列を抜き出して、同一テーブルにある任意のフィールドに設定したいと考えているのですが、可能でしょうか?
自分なりに試してはみたのですが、いまの自分には荷が重いようです。
ご教示願いただければ幸いです。
よろしくお願いします。

【例】
下記のようなHTMLソースから、「抜き出したい部分A」と「抜き出したい部分B」だけを抜き出してしたい。
「抜き出したい部分A」を「フィールド1」に、「抜き出したい部分B」を「フィールド2」に、設定したいです。

<div data-ratUnit="true" class="ClassA">
    <div class="ClassB" itemPosition="4" pageNumber="1" style="display:none;"></div>
    <div class="ClassC">
        <a href="http://xxxxxxxx.com/任意のパス/抜き出したい部分A/">
            <img alt="イメージALT" src="画像URL" ></a>
    </div>
    <div class="ClassD">
        <h2>
            <a href="http://xxxxxxxx.com/任意のパス/抜き出したい部分A/">テキスト</a>
        </h2>
        <p class="ClassE">テキスト2</p>
        <div class="ClassF">
            <div class="ClassG">
                <span class="ClassH"></span>
                <span class="ClassI">
                    <a href="http://xxxxxxxx.com/任意のパス/抜き出したい部分A/">
                        テキスト3</a>
                </span>
                </div>
        </div>

<div data-ratUnit="true" class="ClassA">
    <div class="ClassB" itemPosition="4" pageNumber="1" style="display:none;"></div>
    <div class="ClassC">
        <a href="http://xxxxxxxx.com/必要ない/123456/">
            <img alt="イメージALT" src="画像URL" ></a>
    </div>
    <div class="ClassD">
        <h2>
            <a href="http://xxxxxxxx.com/必要ない/123456/">テキスト</a>
        </h2>
        <p class="ClassE">テキスト2</p>
        <div class="ClassF">
            <div class="ClassG">
                <span class="ClassH"></span>
                <span class="ClassI">
                    <a href="http://xxxxxxxx.com/必要ない/123456/">
                        テキスト3</a>
                </span>
                </div>
        </div>
       

<div data-ratUnit="true" class="ClassA">
    <div class="ClassB" itemPosition="4" pageNumber="1" style="display:none;"></div>
    <div class="ClassC">
        <a href="http://xxxxxxxx.com/必要ない/78910/">
            <img alt="イメージALT" src="画像URL" ></a>
    </div>
    <div class="ClassD">
        <h2>
            <a href="http://xxxxxxxx.com/必要ない/78910/">テキスト</a>
        </h2>
        <p class="ClassE">テキスト2</p>
        <div class="ClassF">
            <div class="ClassG">
                <span class="ClassH"></span>
                <span class="ClassI">
                    <a href="http://xxxxxxxx.com/必要ない/78910/">
                        テキスト3</a>
                </span>
                </div>
        </div>


<div data-ratUnit="true" class="ClassA">
    <div class="ClassB" itemPosition="4" pageNumber="1" style="display:none;"></div>
    <div class="ClassC">
        <a href="http://xxxxxxxx.com/任意のパス/抜き出したい部分B/">
            <img alt="イメージALT" src="画像URL" ></a>
    </div>
    <div class="ClassD">
        <h2>
            <a href="http://xxxxxxxx.com/任意のパス/抜き出したい部分B/">テキスト</a>
        </h2>
        <p class="ClassE">テキスト2</p>
        <div class="ClassF">
            <div class="ClassG">
                <span class="ClassH"></span>
                <span class="ClassI">
                    <a href="http://xxxxxxxx.com/任意のパス/抜き出したい部分B/">
                        テキスト3</a>
                </span>
                </div>
        </div>

Offline

#2 2017-05-19 18:40:04

Shin
Member

Re: 取得したHTMLソースの任意の文字列の後ろを抜き出し、フィールドに設定したい。

その規則は?

Offline

#3 2017-05-19 20:41:14

Hiro
Member

Re: 取得したHTMLソースの任意の文字列の後ろを抜き出し、フィールドに設定したい。

その規則が、
   抜き出し部分の文字列が「123456」あるいは「78910」でないもの、
と考えて良いなら、

その式は、ループ式で、複数結果は改行一覧リストで返します。

Let([
   $htm=Substitute(HTMLソース; [¶;"|||"]);
      $htm=Substitute($htm; ["<div class=\"ClassC\">|||        <a href=\"";¶]);
   $neg=List("123456";"78910");      //ネガティブリストをココに記述
   $i=1;
   $res="";
   $fnc="Case($i=ValueCount($htm); $res;
      Let([
        $i=$i+1;
           #itm=GetValue($htm; $i);
              #itm=Substitute(#itm; [\"|||\";\"\¶\"]);
                 #itm=GetValue(#itm; 1);
           #pos1=Position(#itm;\"/\";Length(#itm);-2)+1;
              #pos2=Position(#itm;\"/\";Length(#itm);-1);
           #add=Middle(#itm;#pos1;#pos2-#pos1);
              #add=Case(FilterValues($neg;#add)=\"\"; #add);
        $res=List($res; #add)
      ]; Evaluate($fnc))
   )"
];
   Evaluate($fnc)      // フィールド1に1行目を代入するなら  → GetValue(Evaluate($fnc); 1)
)

Last edited by Hiro (2017-05-21 12:06:31)

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.004 seconds, 7 queries executed - Memory usage: 565.37 KiB (Peak: 581.4 KiB) ]