2016-06-26 8 views
1

これは私の最初の投稿です。C++ Builder - 特定の単語に基づいてリンクを文字列にコピー

私はMemoまたはTStringList 4つのリンクがあります別の文字列に上に示され、そしてその インデックスに基づいていないと私は何をしたいが、その"id number"に基づいて、各リンクをコピーすることです

http://website.com/text/book&id=20/programming 
http://website.com/text/book&id=10/programming 
http://website.com/text/book&id=40/programming 
http://website.com/text/book&id=30/programming 

TMemoまたはTStringListである。

これは、各リンクのID番号が常に毎回またはダイナミックス(ランダムなID)で変更されるためです。

それでは言わせて:

  1. リンクcontaintsがid=10それは"id10"と呼ばれる文字列にコピーする必要があります。リンクcontaintsがid=30それは"id30"と呼ばれる文字列にコピーする必要がある場合http://website.com/text/book&id=10/programming
    • 最終的な結果はid10 containtsです。
      • 最終結果はid30 containtsある:http://website.com/text/book&id=30/programming
    • ようにし、上のすべてのリンクは、別々の異なる文字列にコピーされるまで。私のような、substring機能を使用してこの問題を解決しようとした

:残念ながら

int p = 0; 
String id10, id20, id30, id40; 
p = Memo1->Lines->Text.Pos("id=20"); 
if (p != 0) 
{ 
    id10 = Memo1->Lines->Text.SubString(p + 1, Memo1->Lines->Text.Length()); 
    ShowMessage(id10); 
} 

...... 

は、そのは常に失敗しました。私はC++とその種の新人ですが、私はそのすべてをどうするべきか分かりません。ごめんなさい。

このような状況に対応するには、あなたの助けが必要です。

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

答えて

0

テキストプロパティから.Pos()を呼び出すと、メモコントロールのテキスト全体で見つかった文字列の位置のインデックスが取得されています。ここではC++ BuilderのTMemoオブジェクトから各行を読み取る方法の簡単な例です:

AnsiString id10; 

for (int i = 0; i < Memo1->Lines->Count; i++) 
{ 
    AnsiString line = Memo1->Lines->Strings[i]; 

    if (line.Pos("id=10") > 0) 
    { 
     id10 = line; 
     ShowMessage(id10); 
    } 
} 

上記のスニペットを使用するには、あなたはそれはあなたがやりたいようにする方法を推測することができるはずです。

+0

これは動作します、ありがとうございます。 – Michal

+0

@Michal喜んで助けて! –

関連する問題