B-5 文字列の検索−AnsiPos 関数−

【基礎課題 B-5】

次のように、ウェブページのアドレスが含まれた行 (「http://」という文字列がある行) を取り出すプログラムを作りましょう。

ある文字列が含まれていかどうかを調べるためには、AnsiPos 関数を使います。

AnsiPos 関数の使い方

AnsiPos 関数は、ある文字列に別の文字列が含まれているかどうかを調べる関数です。

AnsiPos('C', 'ABCDEF')

とあったら、「ABCDEF」の3文字目が「C」と一致するので、「3」を返します。

AnsiPos('DE', 'ABCDEF')

とあったら、「ABCDEF」の4〜5文字目が「DE」と一致するので、「4」、つまり一致する先頭の場所を返します。

AnsiPos('SGU', 'ABCDEF')

とあったら、「ABCDEF」のどこも「SGU」と一致しないので、「0」を返します。

次の空欄を埋め、上に示した処理を行うプログラムを完成させてください。

procedure TForm1.ButtonFilterClick(Sender: TObject);
var
  i : Integer;
begin
  for i := 0 to ________________________ do
    begin
      if AnsiPos(________________, ________________________) >= ____
        then
          begin
            EditTo.Text := ________________________;
          end
      ;
    end;
end;
 該当文字列が含まれている場合は AnsiPos の値は1以上となります。

【基礎課題 B-6】

【基礎課題 B-5】 では、次のように該当行が2行以上ある場合でも最後の1行しか抽出できません。

そこで、次のように該当行全てを抜き出すようにプログラムを拡張しましょう。今度は右側の欄もメモコンポーネントにします。

まずは、コンポーネントを配置してください。

コンポーネント Name プロパティ
左のメモ MemoFrom
「URL 抽出」ボタン ButtonFilter
右のメモ MemoTo

右側のメモコンポーネント MemoTo に文字列を追加するには、 Add というメソッド (手続き) を用います。Add については【基礎課題3-20】のコラムで簡単にふれました。その使い方 (記述の仕方) は以下の通りです。

例えば、
MemoTo.Lines.Add('ABC');

と書かれていれば、MemoTo に「ABC」という行を追加します。

この Add を使ってプログラムを作成しましょう。次の空欄を埋めてプログラムを完成させてください。

procedure TForm1.ButtonFilterClick(Sender: TObject);
var
  i : Integer;
begin
  for i := 0 to ________________________ do
    begin
      if AnsiPos(________________, ________________________) >= ____
        then
          begin
            ________________________________________;
          end
      ;
    end;
end;

【応用課題 B-2】

次のように、ある職場における従業員の生年月日のデータがあるものとします。ここから月だけを順に抜き出すプログラムを作ってください。

 これは、B-3節で学習した Copy 関数の復習です。

【応用課題 B-3】

次のように、左側に (姓名の間が半角スペースで区切られた) 顧客データがあり、ボタンを押すと右側のようなダイレクトメールの文章を (各顧客に対して) 自動生成する、というプログラムを作ってください。

ヒント

顧客の姓は、各行の1文字目から空白の一つ前までの文字列に対応します。これを抜き出すには、B-3 節で学習した copy 関数を用いれば良いですね。空白の位置は AnsiPos 関数で求まります。