• ベストアンサー

BCBで指定位置から指定文字数分の文字の取得

OS:Win XP Pro Borland C++ Builder 5 BCBをはじめて一ヶ月程です。 Delphiですと下記のようにできるようですが、BCBで同様の処理をさせるにはどうしたらいいのでしょうか? 「未定義の関数'Copy’を呼び出した」とエラーになってしまいます。 var str1, str2 : string; begin str1 := 'test'; str2 := Copy(str1,2,2);

質問者が選んだベストアンサー

  • ベストアンサー
  • Nigun
  • ベストアンサー率22% (200/893)
回答No.1

BCBはずいぶん昔にやったので間違ってたらごめんなさい。 str2 = str1.substring(2,2); でいけたと思います。

goopoo
質問者

お礼

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

関連するQ&A

  • BCBでVC++のDLLを利用するために

    C++Builder5で、VC++で作ったDLLを利用する必要に駆られてしまいました。 提供されているのはDLL本体とヘッダの2点で、BCBからリンクするために、implibを使ってdllからlibの作成をし、プロジェクトに加え、ヘッダをインクルードしました。続けて試しにコードを書いたところ、 '外部シンボル_initialize_libraryが未解決' との表示。(initialize_libraryとはDLL内にある関数です。) 調べてみたところ、 1.呼び出し規約は標準で __stdcall 2.VC++ では、_ がシンボル名の頭に付く 3.Builder ではつかない これで食い違いが生じているんだと思うのですが、更に調べると、モジュール定義ファイルにて再定義をすれば良いとの結論になりました。 BorlandのFAQも見たのですが、書式が理解できなくて・・・そこで質問させて頂きたいのですが、単純にproject名.defを作って、 >IMPORTS >initialize_library=_initialize_library とやってプロジェクトに加えれば良いのでしょうか? ソース本体にextern "C" というのも必要なようですが、こちらの記述も教えて頂けたら嬉しいです。

  • 文字列のコピー

    C言語で、文字列をコピーする関数で、処理が止まってしまいます。 以下が実行したプログラムです。 #include<stdio.h> #include<string.h> void copy(char *str2 ,char *str3){ strcpy(str2,str3); } void input(char* str){ scanf("%s",str); } int main (void){ char *a; char *b="TEST"; printf("%s\n",b); input(a); copy(b,a); printf("%s",b); return(0);} copy(b,a);で処理が止まってしまいます。入力した文字列を表示できるように、御指摘お願いします。

  • 秀丸の正規表現用DLLをDelphiから使いたい

    秀丸に同梱されている正規表現処理用DLL、HMJRE.DLLをDelphiで使用しようとしているのですが、 うまくいきません。 実行しようとすると「エントリーポイントが見つかりません」と表示されます。 ---------------------- function dllfuncstr(func:String;find_str:String;target_str:String;start_pos:Integer;replace_str:String;kind:Integer):String; external 'HMJRE.DLL'; ... procedure TForm1.Button1Click(Sender: TObject); var find_str, target_str, replace_str:String; start_pos, kind:Integer; begin find_str := '123'; target_str := Memo1.Lines[0]; start_pos := 0; replace_str := 'abc'; kind := 1;// Memo2.Lines[0]:= dllfuncstr('ReplaceRegularNoCaseSence',find_str,target_str,start_pos,replace_str,1); end; ----- 秀丸のヘルプにマクロから呼び出す場合の例 が次のように記載されています。 $s = dllfuncstr( "ReplaceRegular", "([a-z]+)([0-9]+)", "--abcdefg1234567--", 0, "\\2\\1" ); message $s; DelphiのバージョンはXE5です。

  • 文字列と配列の振る舞いの違いについて

    以下のコードで出るalertが Array => 12 String => 2 となります。この原因といいますか原理をご存じでしたら教えていただけませんでしょうか。お願いします。 =========================================================== var test = function(name){ this.arr.push(name); this.str += name; } test.prototype = { arr:[], str:"" } var r = new test("1"); var z = new test("2"); alert("Array => " + z.arr.join("") + "\nString => " + z.str);

  • オブジェクトの比較と文字列の比較の違い

    今、基本情報技術者の勉強でJavaを勉強しているのですが、持っているテキストの問題で分からないものがありました。 String str1 = "Hello."; String str2 = "Good, Bye."; String str3 = str1; String str4 = str1 + str2; とすると、 (A)str1 == str2; がfalse (B)str1.equals(str3); がtrue というのは分かるのですが、 (C)str4 == "Hello.Good, bye."; がなぜfalseになるのでしょうか? ==はオブジェクトの比較で、equlasは文字列の比較だと書いているのですが、よく違いが分かりません。 また、 上の4つの処理の後に str3 = "test"; という処理を行っているのですが、このときの状況は、 str1はHello.のままで、 str3のみがtestになっている、と理解したのですがそれで合っているのでしょうか?

    • ベストアンサー
    • Java
  • 文字列の置き換え処理について

    いつもお世話になります。 ActionScript3でサイト制作を行なっています。 初歩的な質問で大変恐縮ですが、文字の置き換え処理に関するご質問です。 「a_mc」というムービークリップがあり、関数Aの中で「a_mc」をthis.addChildします。 「b_mc」というムービークリップがあり、関数Aの中で「b_mc」をthis.addChildします。 以下「c_mc」、「d_mc」というムービークリップが続きます。 上記のムービークリップで不要になったものをremoveChildする時に、共通の関数で処理したいと考え、 this.removeChild(*_mc);という感じに*をa~dの文字列に置き換えて処理できるようにしたいと思い、 下記の処理を作成しましたが、「ReferenceError: Error #1065: 変数 b_mc は定義されていません。」 というエラーが表示されてしまいます。 上記の処理を実現するにはどのような処理方法が適切でしょうか? 是非ご教授ください。 宜しくお願い申し上げます。 // コンテンツMC var a_mc:MovieClip = new a_mcs(); var b_mc:MovieClip = new b_mcs(); var c_mc:MovieClip = new c_mcs(); var d_mc:MovieClip = new d_mcs(); this.addChild(a_mc); this.addChild(b_mc); this.addChild(c_mc); this.addChild(d_mc); // コンテンツ消去処理 // 例)ムービークリップb_mcをremoveChildする場合 removeFunc("b"); function removeFunc(str:String):void { var tempStr:String = str + "_mc"; var categoryNameClass:Class = Class(getDefinitionByName(tempStr)); var categoryContents:MovieClip = new categoryNameClass; this.removeChild(categoryContents); }

    • ベストアンサー
    • Flash
  • 【C++/CLI】文字列管理関数の作成

    VC++2005の.NET、言語はC++/CLIでアプリを作成しています。 String型の文字列を管理するクラスを作成しようと思います。 自分ではどのようなものを作成したいのか、イメージはついているのですが、 CLIの知識、技術が足りず、なかなか作成することが難しい状態です。 下記にイメージを記載しますので、有識者の方々アドバイス頂けませんでしょうか。 よろしくお願い致します。 文字列管理クラス「TextTbl」 【TextTbl.h】 enum { STR_TEST1, //格納したい文字列1のID STR_TEST2 //格納したい文字列2のID // ・・・   //ここに追加したい文字列のIDを追加していく } String^ getText( int id ); 【TextTbl.cpp】 // 文字列を取得する関数(引数は文字列のID) String^ TextTbl::getText( int id ) { //文字列のテーブルを定義する処理(文字列IDと文字列の文言が対になって定義されている) //IDを元に文字列を検索し取得する処理 return str; //検索した結果のString型文字列を返す }

  • Delphiのマルチスレッドの割り込み処理について

    Delphiのマルチスレッドの割り込み処理について教えて欲しいのですが、ファイルをスレッドオブジェクトで作成して クラス名.Execute関数内でSynchronizeメソッドを使用しています。 本にはSynchronizeメソッドは「渡したメソッドが実行され終了するまで待ちます」と書いてあり、テストプログラムを作成してもそうでした。ということはSynchronizeメソッドは普通の関数と一緒のような気がしてしまうのですが、違うのでしょうか? Procedure MyThread.Execute begin Synchronize(AAA); AAAの処理が終了するまで待機している end; Procedure TmyThread.AAA; begin 'したい処理' end;

  • javascriptのレキシカルスコープについて

    JSのレキシカルスコープがわかりません。 JSだと、一番外側のスコープで var str = "一番外側のスコープ"; とすると それ以降、ユーザー定義関数の中の、いわゆる関数スコープ内でも var str; と関数内で再定義しない限り、str = "一番外側のスコープ";を つかいまわすことになりますよね? 一度、関数内で、値を変更すると親スコープでもその変更が生きたままになると思います。 var str ="一番外側のスコープ"; function test(){ alert(str); str ="値の変更"; } alert(str) // 関数内で値をかえたけど、それが親スコープにも反映されてしまう。 このことがレキシカルスコープでしょうか? ただ、どこかのサイトで var num = 100; function makefunc() { return function() { alert(num); } } function callfunc() { var num = 50; var func = makefunc(); func(); }; callfunc(); でmakefunc()関数を呼び出した際の 関数内のnumという変数の値が100になるというのです。 実際、実行するとその通りなのですが、 var num = 50; という宣言は、callfunc() という関数の関数スコープ(ローカルスコープ) というのは理解しています。 でその中のいわゆる内部関数というのでしょうか? var func = makefunc(); func(); を実行した際の 変数numというスコープが 一番最初に宣言した  var num = 100; という値をさすというのです。(※そのサイトではこれをレキシカルスコープと呼んでいました) いったどういう動作がレキシカルスコープなのでしょうか? 他にも、クロージャともごっちゃになっております。 識者の方ご教授ください。 参考元はここです http://garden-place.jp/tech/javascript/scope-chain.html

  • コンパイルエラー

    //test.cpp #include<iostream> #include<string> class test { string hoge; public: test(string str); void method() const; } 14行目  test::test(string str) : test(hoge){} void test::method() const { std::cout << "test" << std::endl; } int main() { string s; std::cout << "名前を入力してください。" << std::endl; std::cin >> s; test aaa(s); aaa.method(); } コンパイルしようとすると下記エラーになります。 エラー E2303 test.cpp 7: 型名が必要 エラー E2139 test.cpp 7: 宣言に ; がない エラー E2293 test.cpp 10: ) が必要 エラー E2147 test.cpp 14: 引数宣言は 'string' で始められない エラー E2111 test.cpp 14: ここでは型 'test' は定義できない エラー E2136 test.cpp 14: コンストラクタには戻り型は指定できない エラー E2316 test.cpp 14: 'test::test(int)' は 'test' のメンバーではない エラー E2451 test.cpp 22: 未定義のシンボル string(関数 main() ) エラー E2379 test.cpp 22: ステートメントにセミコロン(;)がない(関数 main() ) エラー E2451 test.cpp 24: 未定義のシンボル s(関数 main() ) *** 10 errors in Compile *** ■1.型名が必要 →string hoge;と宣言してる箇所でエラー発生。 …stringと宣言してるのになぜでしょうか… ■2.宣言に";"がない →string hoge;と宣言してる箇所でエラー発生。 …";"つけてるのですが… ■3.")"が必要 →test(string str);の行でエラー発生。 …")"はどこで必要なのでしょうか ■4.引数宣言はstringでははじめられない →test::test(string str) : test(hoge){}の行でエラー発生。 …C++って引数をstringで受け取れない…?どういうことでしょうか などなど疑問がいっぱいあるのですが、どこが間違っているのかよくわかりません…ご指導よろしくお願いします。

専門家に質問してみよう