Qlik Community

Japan

Announcements
Submit your remarkable customer story for the Global Transformation Awards at QlikWorld Denver 2022. SUBMIT A STORY
cancel
Showing results for 
Search instead for 
Did you mean: 
hitoyama
Contributor
Contributor

複数Webページの取り込みで例えば'@5'が存在しないは?

初めて投稿します山崎です。

Webページのテーブルを複数ページ取得しようとしていますが、ページによっては

'@4'、'@5'が無い場合があり、存在しない場合にエラーハンドリングしたいのですがどうすればいいですか?

IsNullでは判定できない。(現在はエラー無視モードで全件取得可能)

教えてください。よろしくお願いします。

set errormode = 0;

for index = 1011 to 1020

  for Each tbl in '@2','@3','@4','@5'

  if IsNull(tbl) then

        else

        [tmp_list]:

        LOAD [氏名],

            [よみがな],

            [所属]

         FROM [https://sitename/members/alphabet/$(index)]

        (html, utf8, embedded labels, table is $(tbl));

        end if

  next

next

Labels (2)
13 Replies
kentaroWakamatsu
Creator II
Creator II

はじめまして。

ご質問の件ですが、ファイルの種類の選択の際に、Htmlをやめて固定長コードで取得するようにしてみてはどうでしょうか?

Htmlとして取得する場合と違い、ソースを精製する形になるので手間はかかりますが、お困りのケースにも対応が可能です。

この方法だといろんな情報をソースから取得することが可能ですので、一度チャレンジしてみてください。

hitoyama
Contributor
Contributor
Author

早々の回答ありがとうございます。

試しに固定長レコードを選んだところ、HTMLソースが表示されました。HTMLソースをパースすることを言われていますか?

本来のURLは、<table>タグで括られた表がページごとに固定の個数ではなく存在しておりそれをページごと

存在チェックしたいのがゴールです。

よろしくお願いします。

kentaroWakamatsu
Creator II
Creator II

おっしゃるとおり、ソースをパースする事をお伝えしておりましたが、HTMLで取得するのであれば、以下の記載内容で取得できるか、一度試してみてください。

set errormode = 0;

for index = 1011 to 1020

for i = 1 to 99    //'99'の部分は適当に最大数を入れておいて下さい
LET tbl = '@'&$(i);
[tmp_list]:
LOAD [氏名],
      [よみがな],
      [所属]
         FROM [https://sitename/members/alphabet/$(index)]
        (html, utf8, embedded labels, table is $(tbl));

IF ScriptError = 10 then
  exit For
ENDIF

next

next

SET ErrorMode=1;

hitoyama
Contributor
Contributor
Author

別のアプローチを提示いただきありがとうございます。

結果はうまくいきませんでした。

最大テーブル数は5個なので、5に変更して実行しましたがエラーが発生します。

エラーの発生ポイントは、存在しない「テーブル」で発生します。

エラーメッセージ:(一部抜粋)

以下のエラーが発生しました:

Table '@4' not found

よろしくお願いします。
kentaroWakamatsu
Creator II
Creator II

set errormode = 0;

から、記載されていますか?

hitoyama
Contributor
Contributor
Author

はい、記述しています。

途中でエラーが表示されスクリプトは終了します。

kentaroWakamatsu
Creator II
Creator II

これでどうですか?

set errormode = 0;

FOR index = 1011 to 1020
LET Add = chr(91)&'https://sitename/members/alphabet/'&$(index)&chr(93);
FOR i = 1 to 5
  LET tbl = '@'&$(i);
  [tmp_list]:
  LOAD [氏名],
       [よみがな],
       [所属]
  FROM $(Add)
  (html, utf8, embedded labels, table is $(tbl)); 
  IF ScriptError = 10 then
   exit For
  ENDIF
NEXT

NEXT

set errormode = 1;

hitoyama
Contributor
Contributor
Author

回答ありがとうございます。

結果は同じエラーが発生します。

FROMの文字列は、正しい形式で取得できています。

エラーから抜粋:

[https://sitename/members/alphabet/1019]

並行して調べているのですが、「@N」がテーブルと仮定して行数1以上とか

やってはみるもののNGなので継続的に調査を続けます。

ありがとうございました。

kentaroWakamatsu
Creator II
Creator II

set errormode = 0;

をセットしているのに、エラーで止まるのが気になりますね。

通常は、そのままエラーを無視して次の処理へと移るのですが・・・・