Memo.Linesの重複を感知

解決


Yamanin50M  2005-02-20 08:22:43  No: 13322

はじめまして、こんにちは。
いきなりですが質問をさせていただきます。

プログラムの作成中に、

Button1をクリックしたとき、
'ahya'と言う文字列がMemo.LinesになければMemo.Linesに'ahya'を追加。
そしてEdit1.TextをMemo.Linesに追加。

もし、'ahya'と言う文字列あれば'ahya'を追加せずに、
Edit1.TextをMemo.Linesに追加。

という動作をさせようとしましたが、
なにをどうすればいいのか根本的にわからず、質問をしました。

どなたか回答をお願いします。


とーりすがり  2005-02-20 08:40:05  No: 13323

Memo.Linesというのは、行について一致しているかどうか?ということでしょうか?まぁ、テキストでも大して変わりませんが。
行なら、Memo.Lines.IndexOf('ahya');で一致する行があるか調べられます。
テキストなら、AnsiPos('ahya',Memo.Text);で存在を調べられます。
あとは、

if ('ahya'がなければ) then
begin
  Memo.Lines.Add('ahya');
end;
Memo.Lines.Add(Edit1.Text);

な感じで、、、


Yamanin50M  2005-02-20 08:47:24  No: 13324

行についての一致です。忘れてました。すいません。

ソースの
>if ('ahya'がなければ) then
の部分ですが、Memo.Lines.IndexOf('ahya')  と入力しても
「式の結果は Boolean 型でなければなりません」とのエラーが出ます。

ここについてはどのようにすればよいのでしょうか。


Mr.XRAY  URL  2005-02-20 09:03:55  No: 13325

何かすごい質問ですね.
答えは,質問の文章そのまんまの気がします.

>の部分ですが、Memo.Lines.IndexOf('ahya')  と入力しても
>「式の結果は Boolean 型でなければなりません」とのエラーが出ます。

そういう時は,
(1) ヘルプでTMemoのページを開き
(2) Linesプロパティを調べ
(3) Indexメソッドを調べ

という手順で調べます.このようにして,いろいろな知識を身につけて
いった方がいいと思いますよ.それでわからなかったら質問してみると
確実にものになるでしょう.


とーりすがり  2005-02-20 09:05:56  No: 13326

ヘルプでIndexOf(TStringsかTStringList)を引きましょう。

(TStrings:TStringListはoverrideなんで別に変わることもありません)
IndexOf メソッドを呼び出すと,文字列 S の最初に見つかった位置,または大文字小文字が S と異なるだけの文字列の最初に見つかった位置を取得できます。IndexOf は 0 から始まる文字列の添字の値を返します。このようにして S がリスト内の最初の文字列と一致した場合には IndexOf は 0を返し,S が 2 番目と一致した場合には IndexOf は 1 を返します。文字列リストにその文字列がない場合には IndexOf は -1 を返します。

というわけだそうです。
つまり、IndexOf('ahya')で'ahya'の行が無ければ、-1が帰ってくるので、
if (Memo.Lines.IndexOf('ahya') = - 1) then
begin
  //このとき、'ahya'がない!!
end;
ということに、、、

補足ですが、、「式の結果は Boolean 型でなければなりません」
というのは、結局、
if (Memo.Lines.IndexOf('ahya') = - 1) then

if (Memo.Lines.IndexOf('ahya') = - 1) = true then
ということです。これなら、式がBoolean型であるということの意味が分かるでしょう。


Mr.XRAY  URL  2005-02-20 09:06:55  No: 13327

>(3) Indexメソッドを調べ

間違い.IndexOfですね.
ヘルプの使い方がわからなければ質問して下さい.


Yamanin50M  2005-02-20 09:30:39  No: 13328

あ、できました。
とーりすがり さん、  Mr.XRAY  さん。
ご丁寧な回答をありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加