掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
複数の変換規則から、元の文字列を別の文字列に変換するには? (ID:126042)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
[環境]XP/2000 [言語]VB6.0 プログラム外部(ini等)で設定された条件を読込み、 ある文字列をその条件で変換した文字列を作り出したいと考えています。 例えば、"Hello World"から、末尾に"!"を付加し、""Hello World!" というようなものです。 実現したい内容は以下の通り。 1.対象文字列の先頭に、文字を追加 2.対象文字列の末尾に、文字を追加 3.対象文字列のn文字からm文字を、条件で指定した文字で置換 4.対象文字列のn文字の前後に条件で指定した文字を挿入 5.上記条件の複合式 [これを行う目的] ある名称から関連の名称を導き出す処理を、仕様変更・追加毎にプログラム改定で 対応することを避けたい。 現在対象としているのは、製品IDやKEYになるもので、20BYTE程度の 英数文字列が対象となる。 [教えていただきたい内容・アドバイス] 上記を実現するような一般的、お勧めなロジックはどのようなものがありますでしょうか。 私は、以下のような関数形式を考えておりますが、一般的であるか自身が 持てません。 [現在考えている内容] まず、文字の付加・削除命令として、ADD,DELETEを用意し、 上記の操作対象命令(パラメータ)として、LEFT,MID,RIGHTを用意し、 各捜査対象毎に、付加文字列等のパラメータを用意します。 各パラメータは、";"で区切り、 複数条件ある場合は、","区切り、左条件から計算を行います。 ※詳細は長くなるので、省略します。 例)表題の例->ADD;RIGHT;! 3文字目から2文字分を"ABC"に置換し、先頭1文字目を削除 ->ADD;MID;3;2;ABC,DELETE;LEFT;1 ";",","で区切っているのは、Split関数で簡単に抜き出せるからです。 ADDやRIGHTは、関数内でSELECTしやすいからです。 いかがなものでしょうか。ご意見お聞かせください。 以下、ソースです。 長文になるかと思い、"DELETE"部分は省略しております。 '第1引数:元文字列、第2引数:変換後文字列、第3引数:変換用条件式 Public Function CreateOtherKeyEx(ByVal strKey As String, _ ByRef strOtherKey As String, _ ByVal strMethod) As Long Dim strWork() As String Dim lngIdx As Long Dim strResult As String Dim lngParam(1) As Long Dim lngCt As Long Dim strTemp() As String On Error GoTo ErrHandler CreateOtherKeyEx = 1 '複合式の分割 strTemp = Split(strMethod, ",") 'リターン文字列の初期化(元文字列のセット) strResult = strKey '変換キーの初期化 strOtherKey = "" For lngCt = 0 To UBound(strTemp) Step 1 '条件式の抽出(;)区切り strWork = Split(strTemp(lngCt), ";") '式と式パラメータの分割 lngIdx = UBound(strWork) '領域無しは、ハンドリング '式パラメータ無しは、異常で処理終了 If lngIdx = 0 Then CreateOtherKeyEx = -1 Exit Function End If '処理命令(第1パラメータ)の取得 Select Case UCase(strWork(0)) '文字付加命令 Case "ADD" '処理内容(第2パラメータ)の取得 Select Case UCase(strWork(1)) '先頭 Case "LEFT" 'キーの先頭に、第3パラメータを付加 strResult = strWork(2) & strResult '文字中 Case "MID" 'キャスト lngParam(0) = Val(strWork(2)) lngParam(1) = Val(strWork(3)) 'キーの第2、第3パラメータの間に、第5パラメータを付加 strResult = Left$(strResult, lngParam(0) - 1) & strWork(4) & _ Mid$(strResult, lngParam(0) + lngParam(1)) '末尾 Case "RIGHT" 'キーの末尾に、第3パラメータを付加 strResult = strResult & strWork(2) Case Else Exit Function End Select Case Else Exit Function End Select Next lngCt strOtherKey = strResult CreateOtherKeyEx = 0 Exit Function ErrHandler: CreateOtherKeyEx = -999 End Function 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 ・・・因みに #や*等を使って、パターン?でチェックするのがスマート・プログラムっぽいかなと 思ったのですが、ロジックが簡単に出てこないので、上の関数形式を 考えました。 *ABCで末尾に"ABC"を追加。 ##!!*で3文字目から4文字目を削除等。(!が削除記号) 色々パターンを考えると難しいかなぁと思いやめました。 以上です。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.