• ベストアンサー

Const定義した文字列にパラメータを渡す?

いつもお世話になっています。 今開発中のプロジェクトでメッセージ文言の文字列をインクルードファイルにconstで定義し、実際のプログラム中にベタで書くのをやめる決まりを作ろうと思うのですが、const定義した文字列にパラメータを渡すことが出来ますか? たとえば const A = "すでに同じ%があります。" Aの"%"部分を可変にしたい場合、たしか上記のように"%"か"?"かなんかで設定してあげて、文字列を編集したメッセージボックスを表示する共通関数を作り、その関数に%部分の文字列をパラメータで渡すという開発手順をVBで経験した記憶があるのですが・・・。 その時は共通関数を呼ぶだけで、まだ超初心者だったこともあり関数の中身まで読んで勉強することがなかったのでよく仕組みがわからないのですが、こういう場合、自分で文字列置換の関数を作るだけなんですか? それともなんらかの方法があるのでしょうか。 みなさんよろしくお願いいたします。

  • saeyui
  • お礼率90% (255/281)

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

  • ベストアンサー
  • Zeus089
  • ベストアンサー率30% (3/10)
回答No.2

一般的には Const A = "すでに同じ%0%があります。%1%に変更しますか?" などと定義し、 Replace(A, "%0%", "データ") Replace(A, "%1%", "Key=2") とすれば汎用化できます。

saeyui
質問者

お礼

ありがとうございます。お礼がおそくなってしまって申し訳ありません。 なるほど、という感じです。検討してみます。 上司に話したところ、上司がプログラミングしたことのある言語だとそういう関数があるそうなのです。普通にVBでもありそうなのに・・・という感じで調べてました。なさそうなのでZeus089さんのアドバイスを検討してみようと思います。

その他の回答 (1)

  • mfuku
  • ベストアンサー率50% (173/345)
回答No.1

Replace関数を使えば簡単に文字列置換ができます。 例えば、下記のように使用します。 ----------------------------------- Const A = "すでに同じ%があります。" Response.Write Replace(A, "%", "サンプル") ----------------------------------- 上記の例は定数Aの"%"を"サンプル"に置き換える例です。 この部分を汎用的に共通関数化すればOKだと思います。

saeyui
質問者

補足

ありがとうございます。 確か前のVBの開発では"%"部分が2つあってもその順番にパラメータを渡してあげれば大丈夫な気がしたんです。 Response.Write Replace(A, "%", "サンプル") だと一括置換になってしまうので、やっぱり自分でInstr("%")って感じで何文字目か取得するしかないのでしょうか・・・。

関連するQ&A

  • 正規表現を使って文字列置換を行いたい

    みなさんいつもお世話になります。 とあるプログラムの置換処理を行いたいのですが、 <a href="JavaScript:prfCallList(2,'27','27125','大阪市住之江区','')"> ↑の文字列の 「2,'27','27125','大阪市住之江区',''」 の部分(つまりprfCallList関数のパラメータ) が可変な文字列をいっきに <a href="shopmapItiran2.htm"> と変えたい時ってどのような正規表現になるのでしょうか? 私は正規表現を使うと楽らしいよってのは知ってるけど使った事がない・・・というレベルです。 ネットで一応正規表現入門みたいなサイトも読んでみたのですがよくわからず(T_T) お手数をおかけしますが、よろしくお願いします。

  • 定義した文字列を wchar_t 系の関数へ

    こんにちは。 VisualStudioでマルチバイト文字セットを使用する設定のプロジェクトで、下記のように定義された文字列を wchar_t をパラメータとする関数にセットするにはどのようにすればよろしいのでしょうか? #define _FOO "foo" void funcA( const char* const szValue ) { } void funcW( const wchar_t* const szValue ) { } void test( void ) { funcA( TEXT( FOO )) ; ← ok。 funcW( TEXT( FOO )) ; ← エラー。 } UNICODE文字セットを使用する設定のプロジェクトならば問題ないのですが、マルチバイト設定ですとエラーになってしまいます。UNICODE、マルチバイト両方にプロジェクトに対応できるにはどうきじゅつすればよろしいのでしょうか。

  • パラメータをランダム文字列で表わしたい

    某サイトでリンクをクリックすると、下記のようにランダム文字列がパラメータとして渡されるものがあります。 http://www.foobar.jp/cgi-bin/abcd.cgi?a=10004414&b=PMird395j ランダム関数で生成?もしくは暗号化?しているのではないかと思うのですが、例えば商品番号などをそのままの数値でなく暗号化することができれば、セキュリティの向上にもつながるのではないかと思います。 このような文字列をPHPで簡単に生成する方法には、どのようなものがあるでしょうか。もちろん、文字列から元のIDや番号を復元できなければなりません。暗号化を使うのが良いのでしょうか。

    • ベストアンサー
    • PHP
  • あったらいいなと思う、C文字列ライブラリ関数

    みなさんC言語で開発してきた中で、ライブラリとして用意されてたら いいなと思った事のある関数・処理としてどのようなものがありますでしょうか。 特定業務向けの話でなく、汎用的な処理ででも結構です。 例えば、いつも思うのが、なんで文字列A中の文字列Bを、文字列Cに置換する 関数ってなんでないんだろう、などですかね。 (そりゃstrstr、strcatなど既存ライブラリ関数を使いまわせば書けますが...)

  • ヘッダファイルにおける文字列リソース定義

    C言語(主にVC++)で開発をしていると、よく、 const char MSG_HELLO[] = "HELLO!"; のように、ヘッダファイル中で、文字列リテラルを定義します。 自分もいつのまにかこのようにリソース定義するようになっていましたが、初期の頃から疑問だったのは、extern宣言せずにchar配列を宣言しているから、コンパイラが最適化しなかったら、上記宣言のあるヘッダファイルを読み込んで、その定義を使った個所のあるソース分文字列リテラルがメモリ上に確保されてしまうのではないか、、?ということです。 つまり、本来なら const char* MSG_HELLO[] = "HELLO!"; とソースファイル中で定義し、ヘッダファイルには extern const char* MSG_HELLO; とすべきではないか、と思うわけです。ただ実際にこれをやっているとヘッダとソースの両方のメンテナンスが必要になるので、冒頭のように記述しているのだと思いますが。 この、本来なら下記のようにすべきだが、コンパイラの最適化(リソースのプール)を期待して最初のように書いている、という解釈は正しいでしょうか?

  • 参照文字列から検索文字列を置きの件

    >SUBSTITUTE(SUBSTITUTE(文字列,検索文字1,置換文字1),検索文字2,置換文字2)  上記の関数は8桁以上は出来ません、他の方法の関数があれば、  よろしくお願いします。(13桁)  尚、マクロ以外でできますか。  例、 A-福岡      B-佐賀

  • 文字列を規則にしたがって変換する処理の名前

    文字列を規則にしたがって変換する処理の名前はどう言うのでしょう? 文字列の中でいくつかの関数を呼び出すことが出来て、その関数の結果は文字列として関数の部分と置換されます。 文字列を文字列に変換する処理です。

  • こんな文字列置換ツールもしくは置換法を探しています。

    こんな文字列置換ツールもしくは置換法を探しています。 共通した文字列「文字列A」を含むHTMLファイルが3つあります。 ファイル名は簡単に「1」、「2」、「3」とします。 この3個のファイルの「文字列A」を 置換候補(たとえば「文字列あ」、「文字列い」、「文字列う」)を指定し、 一括で置換できるツールもしくは方法をご存じの方はお教えいただけないでしょうか? ツールの場合、置換候補をCSVファイルなどで一気に指定できればなお良しです。 よろしくお願いします。

  • CStringの文字列検索&抜き出しについて

    お世話になります。 ///////////開発環境/////////// WinXP VisualStudio 2005 SDI MFC 以上の環境にてプログラムしています。 現在CString型の変数の中にある文字列操作について悩んでいます。 例えば、 CString Test(:program!~program@123.456 TEST :message); このような内容が入ってるとします。 こんな時に例えばTESTを抜き出したい時にどうすればいいでしょうか? なお、毎回TESTという文字列ではなくTEST2などの文字列が変わるもの だとするとバイト数指定が出来なくて困っています。 バイト数指定しないでTESTのTのアドレスをGETしてそれを'\0'までを 切り抜くと:messageの部分まで取れてしまいます。 でもバイト指定が可変なので、出来ない・・。どうすればいいのでしょうか?? 同様にmessageの部分も毎回変わっていてバイト数指定出来ません。 こちらの方は、文字列の最後から:を探していって:が見つかったらその アドレスから'\0'までを切り出せばいいと思うのですが、もし messageの部分に:mess:ageこういうメッセージが送られて来た時に、 :ageしか取れなくなり、本当はmess:ageを切り抜きたいのです。 せっかくMFCのCStringを使っているので、strtokやstr~などのC言語関数 は避けたいのですが、何かいい案ありますでしょうか?? ご教示宜しくお願いいたします。

  • 入力がないのにユーザー定義で定義した文字列が常に表示されてしまう。

    入力がないのにユーザー定義で定義した文字列が常に表示されてしまう。 VLOOKUP関数とIF関数を組み合わせて「=IF(A1="","",VLOOKUP(A1,D2:C5,2,FALSE))」という関数を入力しています。 念のため申し上げますと、 VLOOKUP関数で「D2:C5」の表からデータを検索し、そのデータに該当した行の指定列からデータを取り出しているわけです。 IF関数は、「#N/A」エラーを表示させたくないためです。 この計算式を入力しているセルの書式設定を、ユーザー定義で、「"○""○""○""○""○""○""○"@」としたのですが、 A1セルに入力が無く入力の無いはずのセルに「○○○○○」が常に表示されてしまいます。 どこが間違っているのでしょうか? お知恵を拝借させてください。

専門家に質問してみよう