LoginSignup
0
1

More than 5 years have passed since last update.

c++ builder XE4, 10.2 Tokyo > 自動付加された数値のsuffix (例 "_123") を取得する実装

Last updated at Posted at 2015-12-14
動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)

http://qiita.com/7of9/items/29f5393b523bdc9a30ba
の問題の対応

Unit1.cpp
#include <IdGlobal.hpp> // IsNumeric();
...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    String work1 = L"AAA_BBB_CCC_123";
    String suffix1 = getAutoAddedNumberSuffix(work1); // "_123";

    String work2 = L"AAA_BBB_CCC";
    String suffix2 = getAutoAddedNumberSuffix(work2); // L""

    String work3 = L"AAA_BBB_CCC_NAN";
    String suffix3 = getAutoAddedNumberSuffix(work3); // L""

    String work4 = L"AAA_BBB_CCC_";
    String suffix4 = getAutoAddedNumberSuffix(work4); // L""

    String work5 = L"AAA_BBB_CCC_1A3";
    String suffix5 = getAutoAddedNumberSuffix(work5); // L""

    String work6 = L"AAA_BBB_CCC_31415";
    String suffix6 = getAutoAddedNumberSuffix(work6); // L"_31415"

    String work7 = L"AAA_BBB_CCC_3141592";
    String suffix7 = getAutoAddedNumberSuffix(work7); // L""
}
//---------------------------------------------------------------------------

String __fastcall TForm1::getAutoAddedNumberSuffix(String srcStr)
{
    // 5桁までしか対応していない
    // _が複数入っている文字列に対応

    int len = srcStr.Length();
    static const int kToTheLast = MAXINT;
    String work = srcStr.SubString(len - 5, kToTheLast);    // 5:5桁まで

    int posUnderbar = work.Pos(L"_");
    if (posUnderbar == 0) {
        return L"";
    }

    String suffixNoUnderbar = work.SubString(posUnderbar + 1, kToTheLast);
    if (IsNumeric(suffixNoUnderbar)) {
        return L"_" + suffixNoUnderbar;
    }

    return L"";
}

getAutoAddedNumberSuffix()を使って、自動付加されたsuffixを見つける。
5桁数値のサフィックスまで対応 (インスタンスを5桁分作るということはないだろう。2桁は必要)。

取得したsuffixを使ってStringReplaceで取り除けばいい。

Unit2.cpp
    String numberSuffix = getAutoAddedNumberSuffix(this->Name); // 自動付加されるもの。例 L"_2"
    String nameNoSuffix = StringReplace(this->Name, numberSuffix, L"", TReplaceFlags()<<rfReplaceAll);
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1