次のように、ウェブページのアドレスが含まれた行 (「http://」という文字列がある行) を取り出すプログラムを作りましょう。
ある文字列が含まれていかどうかを調べるためには、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;
【基礎課題 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;
次のように、ある職場における従業員の生年月日のデータがあるものとします。ここから月だけを順に抜き出すプログラムを作ってください。
次のように、左側に (姓名の間が半角スペースで区切られた) 顧客データがあり、ボタンを押すと右側のようなダイレクトメールの文章を (各顧客に対して) 自動生成する、というプログラムを作ってください。
ヒント
顧客の姓は、各行の1文字目から空白の一つ前までの文字列に対応します。これを抜き出すには、B-3 節で学習した copy 関数を用いれば良いですね。空白の位置は AnsiPos 関数で求まります。