B-3 文字列の取り出し (1)−Copy関数−

e-mail のやりとりをしていると、「>」という記号を使って他人の e-mail の文章を引用することが多くなります。しかし、受信した e-mail をワープロで印刷するときなど、場合によって「>」を取り除きたくなることがあります。そこで、下のように「>」がついた引用文を入れるとそれを取り除いてくれるプログラムを作りましょう。 

【練習問題】

ですが、全ての行を処理するプログラムは少々複雑になるので、まずは1行だけを処理するプログラムを作りましょう。

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

コンポーネント Name プロパティ
「引用符除去」ボタン ButtonFilter
エディット Edit1

次に、イベントハンドラ ButtonFilterClick を次の通りに記述してください。

procedure TForm1.ButtonFilterClick(Sender: TObject);
begin
  Edit1.Text := Copy(Edit1.Text, 2, Length(Edit1.Text) - 1);
end;

ここで新しい関数 Copy が出てきました。その使い方については、次を読んでください。

Copy 関数の使い方

Copy 関数は、部分文字列を取り出す、つまりもとの文字列の一部を取り出す関数です。

Copy('ABCDE', 2, 3)

とあったら、「ABCDE」という文字列の2番目から3文字分を意味するので、「BCD」を返します。

Copy('ABCDE', 3, 1)

とあったら、「ABCDE」という文字列の3番目から1文字分を意味するので、「C」を返します。

Copy(Edit1.Text, 4, 2)

とあったら、Edit1 の文字列の4番目から2文字分を意味します。もし Edit1.Text の中身が 「SAPPORO」だったら、「PO」を返します。

作成したら、実行して動作を確認してください。

【基礎課題 B-3】

エディットで1行が無事に処理できるようになったら、今度はエディットをメモに変更して複数行を処理できるよう拡張しましょう。コンポーネントを次のように配置してください。

コンポーネント Name プロパティ
「引用符除去」ボタン ButtonFilter
メモ Memo1

プログラムについては、上の【練習問題】で行った処理を、Memo1.Lines[0]Memo1.Lines[1]…について順に行えば良いことは分かると思います。つまり行数分だけ処理を繰り返せば良いのです。

それでは、行数はどのように数えれば良いのでしょうか? 上の例では処理する行が全部で4行 (Memo1.Lines[0]Memo1.Lines[3]) ですが、一般には何行入力されるのかは、あらかじめは分かりません。 実は、メモコンポーネント上に存在する行数は Count というプロパティに格納されています。上の例では、

Memo1.Lines.Count

の値は 4 になります。この Count プロパティを用いればメモコンポーネント上に存在する行数が分かります。