SRC意見交換掲示板Mk2
(現在 過去ログ38 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■4251 / inTopicNo.1)  For〜Nextの拡張、関数色々 投稿
  
□投稿者/ TomTom -(2005/05/30(Mon) 13:48:54) [ID:NXyOvuTn]
    omTomです。

    ZOC関連への機能追加は投稿したものが本体に反映されてからのほうが都合が良いので、
    その間に細々とした関数の追加など行いたいと思います。

    正規表現の機能を追加しましたが、通常のプログラミング経験の無い方には理解しにくいでしょうか。
    とりあえずは「Like演算子のスゴイやつ」位に考えていただければ良いかと思います。

    それでは、問題点等のご意見よろしくお願いします。

    なお、「ついでにこんな関数も追加しろ」というようなものがあれば、
    ムチャなものでない限り追加しようかと考えています。


    追加・変更内容は以下の通りです。

    ○For〜Nextコマンド
     Basicと同じようにStep句が使用できるように変更
      例)For i = 1 To 10 Step 2
        このような場合に、iの数を2ずつ加算してループ

    ○InStr関数、InStrB関数
     書式を拡張
     書式)InStr(文字列1,文字列2[,開始位置]) //InStrBも同様
      [開始位置]に数値を設定することで、[文字列2]を検索する開始位置を指定できるように変更
      (省略時は従来どおり文字列の先頭から)
     例)InStr("あいうえおえういあ","う",4)は 7 を返す

    ○InStrRev関数、InStrRevB関数
     文字列の後ろから検索するInStr関数
     書式)InStrRev(文字列1,文字列2[,開始位置]) //InStrRevBも同様
      [文字列1]の後ろから[文字列2]を検索し、左から数えた位置を返す(InStrRevBはバイト単位)
      InStrと同様に、[開始位置]で開始位置の指定が出来る(左から数えた位置で指定)
     例)InStrRev("あいうえおえういあ","う")は 7 を返す
     例)InStrRev("あいうえおえういあ","う", 4)は 3 を返す

    ○Replace関数追加
     文字列を置換する
     書式)Replace(文字列1,文字列2,文字列3)
      [文字列1]の中から[文字列2]を検索し、それらを全て[文字列3]に変換する
     例)Replace("abcdefabcdef","cde","CDE")は「abCDEfabCDEf」を返す
      
    ○String関数追加
     文字列を繰り返す
     書式)String(回数,文字列)
      [文字列]を[回数]回繰り返した文字列を返す
     例)String(3,"abc")は「abcabcabc」を返す

    ○LSearch関数追加
     リストの中から要素を検索し、その位置を返す
     書式)LSearch(リスト, 検索値, [開始位置])
      [リスト]の要素の中から[検索値]を検索しその位置を返す。無ければ0を返す
      [開始位置]が指定されている場合は、そのインデックスの要素から検索を開始する
     例)LSearch("abc def ghi","def")は 2 を返す
     例)LSearch("abc (def ghi)","def")は 0 を返す
     例)LSearch("abc def ghi","def",3)は 0 を返す

    ○RegExp関数追加
     正規表現によって文字列を検索する
     書式)RegExp(文字列, パターン[,大小区別あり|大小区別なし]
        RegExp()
      [文字列]の中から正規表現パターン[パターン]に当てはまる文字列を検索して返す
      「大小区別あり」「大小区別なし」は英字の大小を区別するかどうかを指定
      (デフォルトは「大小区別あり」)
      引数に何も指定しなかった場合、パターンに合致した次の文字列を返す
     例)RegExp("あいあうあえあお","あ.")は「あい」を返す。続けて
       RegExp()と指定した場合、次にパターンに合致する「あう」を返す

    ○RegExpReplace関数追加
     正規表現によって文字列を置換する
     書式)RegExpReplace(文字列, 検索パターン, 置換パターン[,大小区別あり|大小区別なし]
      [文字列]の中から正規表現パターン[検索パターン]に当てはまる文字列を検索し、
      [置換パターン]で変換した結果を返す
      「大小区別あり」「大小区別なし」は英字の大小を区別するかどうかを指定
      (デフォルトは「大小区別あり」)
     例)RegExpReplace("あいあうあえあお", "うあ", "ウア")「あいあウアえあお」
     例)RegExpReplace("あいあうあえあお", "あ(.)あ", "ア$1$1ア")「アいいアうアええアお」

     ※正規表現の扱いには多少の知識が必要となります。[パターン]の設定には以下のURLを参考にしてください。
      http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/vspropattern.asp
引用返信/返信 削除キー/
■4252 / inTopicNo.2)  関数等リクエスト
□投稿者/ 皇 -(2005/05/30(Mon) 21:25:43) [ID:DrXPbKtO]
    こんばんは、皇です。
    機能追加、お疲れ様です。
    シナリオ作りをしていて、あったらいいなと思う関数が
    いくつかあるのでリクエストしてみます。

    ○Swap variable1 variable2
    変数1と変数2の中身を入れ替える。

    ○Max関数・Min関数 機能拡張
    3つ以上の要素数でも比較を可能に。

    ○Round関数
    数aを桁数bで四捨五入した値を返す。
    bがマイナスの場合、小数点以下第b位。
    書式)Round(a,b)

    ○RoundUp関数
    数aを桁数bで切り上げた値を返す。
    bがマイナスの場合、小数点以下第b位。
    書式)RoundUp(a,b)

    ○RoundDown関数
    数aを桁数bで切り捨てた値を返す。
    bがマイナスの場合、小数点以下第b位。
    書式)RoundDown(a,b)

    ○Route関数
    地点(a,b)と地点(c,d)を結ぶ経路のe番目の地点をリストで返します。
    2点を結ぶ経路とは、M線やM移兵器の射線のことを指します。
    2点間の距離を越えた場合、0を返します。
    書式)Route(a,b,c,d,e)

    例)Route(1,1,3,3,1) で 「1 2」を返す
    Route(1,1,3,3,2) で 「2 2」を返す
    Route(1,1,3,3,3) で 「2 3」を返す
    Route(1,1,3,3,4) で 「3 3」を返す
    Route(1,1,3,3,5) で 「0」を返す


    以上です。
    もし興味を引くものがありましたら、採用を検討してみてください。
    それでは、失礼します。

引用返信/返信 削除キー/
■4253 / inTopicNo.3)  Re[1]: For〜Nextの拡張、関数色々 投稿
□投稿者/ gaine -(2005/05/30(Mon) 21:49:45) [ID:RinWOfkf]
    一つ気になったのですが、

    For〜Nextコマンドで、Step句がない場合は従来どおりの動作ということでしょうか?
    Stepがないと動かない、だと少しまずいかなと思いましたので、念のため確認です。
引用返信/返信 削除キー/
■4254 / inTopicNo.4)  Re[1]: For〜Nextの拡張、関数色々 投稿
□投稿者/ 参木 強浩 -(2005/05/30(Mon) 22:02:41) [ID:O6vrSpPQ]
    様々な機能の追加に、なるほどと思うところです。
    数点気になった所がありましたので発言させてもらいます。

    >○String関数追加
    > 文字列を繰り返す
    > 書式)String(回数,文字列)
    >  [文字列]を[回数]回繰り返した文字列を返す
    > 例)String(3,"abc")は「abcabcabc」を返す
    String は文字列という意味でつかうと思いますので、他の関数名がいいと思います。

    >○Replace関数追加
    > 文字列を置換する
    > 書式)Replace(文字列1,文字列2,文字列3)
    >  [文字列1]の中から[文字列2]を検索し、それらを全て[文字列3]に変換する
    > 例)Replace("abcdefabcdef","cde","CDE")は「abCDEfabCDEf」を返す
    全ての変換が気になりますので、
    Replace(文字列1,文字列2,文字列3,位置[,文字数])
    というMid関数風にするのばどうでしょうか。

    >○RegExp関数追加
    >○RegExpReplace関数追加
    RegExp関数は「パターン判断」し、再起呼び出しで次の「パターン判断」へと続くように思えます。ということは繰り返す前の関数の情報が残る。
    RegExpReplace関数は「パターン判断」し「置換」を繰り返し最後まで行うように思えます。ということは繰り返す前の関数の情報が残らない。
    このようなイメージを感じました。
    RegExpReplace関数はオプションで、RegExp関数のように一個ずつ置換するを追加するのはどうでしょうか。

    以上で失礼します。
引用返信/返信 削除キー/
■4255 / inTopicNo.5)  マルチ1
□投稿者/ TomTom -(2005/05/30(Mon) 22:50:41) [ID:7IKyKB1y]
    TomTomです。

    ご意見どうもありがとうございます。


    皇さん>
    >○Swap variable1 variable2
    >○Max関数・Min関数 機能拡張
    >○Round関数
    >○RoundUp関数
    >○RoundDown関数

    この辺は良さそうですね。実装しようと思います。

    >○Route関数

    これは少し考えさせてください。
    M移などの経路決定のルーチンがどこにあるかまだ確認していないので、
    それが発見できれば、ということになるかと思います。


    gaineさん>
    >For〜Nextコマンドで、Step句がない場合は従来どおりの動作ということでしょうか?
    >Stepがないと動かない、だと少しまずいかなと思いましたので、念のため確認です。

    説明不足でしたね。申し訳ないです。
    Step句を指定しない場合は、従来どおり1ずつ加算されていくことになります。


    参木 強浩さん>
    >String は文字列という意味でつかうと思いますので、他の関数名がいいと思います。

    これはVBのString関数の移植なんですよね。
    現状としてほとんどの関数の名前がVBから取られていることですし、このままで行きたいところです。

    >全ての変換が気になりますので、
    >Replace(文字列1,文字列2,文字列3,位置[,文字数])
    >というMid関数風にするのばどうでしょうか。

    こちらもVBのReplace関数のベタ移植だったり。
    位置の指定は、ちょっとMid関数やLeft・Right関数と組み合わせれば事足りるんですよね。

     Replace(Mid("aabbcc",2,2),"b","B")   返り値「aaBbcc」

    このような形で。
    ひとまずほりゅうで、他にReplace関数で直接位置を指定できる機能を求められる方が居るなら、
    少々改変して次のような形で実装したいと思います。

     Replace(文字列1,文字列2,文字列3[,開始位置[,文字数]])
      開始位置を指定しない場合は文字列全体、開始位置を指定した場合は開始位置以降、
      文字数まで指定した場合は開始位置から文字数分を置換の対象にする。

    >RegExp関数は「パターン判断」し、再起呼び出しで次の「パターン判断」へと続くように思えます。ということは繰り返す前の関数の情報が残る。
    >RegExpReplace関数は「パターン判断」し「置換」を繰り返し最後まで行うように思えます。ということは繰り返す前の関数の情報が残らない。
    >このようなイメージを感じました。

    そのようなイメージで捉えていただいて結構かと思います。

    >RegExpReplace関数はオプションで、RegExp関数のように一個ずつ置換するを追加するのはどうでしょうか。

    これは……パターンの検索→置換という手順を自前で用意しているわけではなく、完全にWindowsの機能(正確にはVBScriptの機能)に依存しているんですよね。
    なので、その機能に存在しない「一つずつ置換」という処理を割り込ませるのは難しいです。


    それでは、引き続きご意見よろしくお願いします。

引用返信/返信 削除キー/
■4256 / inTopicNo.6)  一部撤回(2005/6/2 12:57追記)
□投稿者/ TomTom -(2005/06/01(Wed) 09:14:16) [ID:NXyOvuTn]
    2005/06/02(Thu) 12:57:33 編集(投稿者)

    TomTomです。

    >皇さん>
    >>○Swap variable1 variable2

    すみません、よくよく考えるとこれは関数ではありませんね。
    変数まわりは意外に複雑ですぐに理解できそうに無いので、いったん保留させていただきます。


    2005/6/2追記
    >参木 強浩さん>
    >こちらもVBのReplace関数のベタ移植だったり。
    >位置の指定は、ちょっとMid関数やLeft・Right関数と組み合わせれば事足りるんですよね。

    > Replace(Mid("aabbcc",2,2),"b","B")   返り値「aaBbcc」

    >このような形で。
    >ひとまずほりゅうで、他にReplace関数で直接位置を指定できる機能を求められる方が居るなら、
    >少々改変して次のような形で実装したいと思います。

    > Replace(文字列1,文字列2,文字列3[,開始位置[,文字数]])
    >  開始位置を指定しない場合は文字列全体、開始位置を指定した場合は開始位置以降、
    >  文字数まで指定した場合は開始位置から文字数分を置換の対象にする。

    これもすみません、大きく寝ぼけていました。
    「Replace(Mid("aabbcc",2,2),"b","B")」では戻り値は「aB」ですね。
    下の案で実装する方向でいきたいと思います。

引用返信/返信 削除キー/
■4266 / inTopicNo.7)  Re[1]: For〜Nextの拡張、関数色々 投稿
□投稿者/ ヒロキ -(2005/06/05(Sun) 02:48:57) [ID:dHLERxvI]
    こんばんは、ヒロキです。
    あったら便利かも、と思うものを箇条書きにしてみました。

    ・文字列を任意のデリミタで分割して配列にする
    書式案:StringTokenizer string delimiter array

    ・配列の内容を別の配列にコピーする
    書式案:Clone array1 array2

    ・配列の内容をソートする、昇順・降順をオプションで指定できる
    書式案:Sort array [order]

    ・システム変数Nowで取得した時刻を任意のフォーマットの文字列に変換する
    書式案:DateFormat(Date,fomat)
    例)DateFomart(Now,"YYYY/MM/DD hh:mm:ss")
    日時を「2005/06/05 02:30:26」というような形式に変換して返す

    ・ディレクトリを作成する
    ・ディレクトリを削除する

    ついでに
    関数とは関係ありませんが、現在のSRCでは
    半角のコロンやセミコロン、ピリオドなんかがTalkなどで使えないんで、
    正規表現でメタ文字を扱うときのノリで表示できるようにはできないでしょうか?

    無茶言って申し訳ありません。
    以上です。それでは


引用返信/返信 削除キー/
■4267 / inTopicNo.8)  Re[2]: For〜Nextの拡張、関数色々 投稿
□投稿者/ TomTom -(2005/06/05(Sun) 09:25:02) [ID:7IKyKB1y]
    TomTomです。

    >・文字列を任意のデリミタで分割して配列にする
    >書式案:StringTokenizer string delimiter array

    >・配列の内容を別の配列にコピーする
    >書式案:Clone array1 array2

    >・配列の内容をソートする、昇順・降順をオプションで指定できる
    >書式案:Sort array [order]

    このあたりですが、マルチレス(の撤回レス)でも書いていますが、
    変数周りの動作がまだ理解できていないので、ちょっと今は難しいですね。
    自分でも欲しいな、と思ってる部分ではあるのですが……

    >・システム変数Nowで取得した時刻を任意のフォーマットの文字列に変換する
    >・ディレクトリを作成する
    >・ディレクトリを削除する

    この辺は出来そうですね。考えて見ます。

    >関数とは関係ありませんが、現在のSRCでは
    >半角のコロンやセミコロン、ピリオドなんかがTalkなどで使えないんで、
    >正規表現でメタ文字を扱うときのノリで表示できるようにはできないでしょうか?

    「\;」「\:」「\<」「\>」は改行やタグとして扱わずに、\の直後の文字をそのまま表示、という形でしょうか。
    すぐに、とは行かないかもしれませんが、実装する方向で行きたいと思います。

    それでは、ご意見ありがとうございます。

    特に反対意見など無ければ、今週末にでも投稿したいと思いますので、
    引き続きご意見お待ちしています。
引用返信/返信 削除キー/
■4268 / inTopicNo.9)  Re[3]: For〜Nextの拡張、関数色々 投稿
□投稿者/ 猫王@管理 -(2005/06/05(Sun) 13:54:30) [ID:QqyMSxGB]
    猫王です。

    No4267に返信(TomTomさんの記事)
    > >・ディレクトリを作成する
    > >・ディレクトリを削除する
    > > この辺は出来そうですね。考えて見ます。

    多分、既に何か対策を検討されていると思いますが、
    仕様について言及されないまま、投稿されるとなると若干不安なので、念の為。

    ファイル操作関係は悪意を持った人がパソコンに害を及ぼさないよう、
    起動中のシナリオフォルダ外をいじれないようになっていますので、
    フォルダ関連もそれに準拠させる必要があると思います。
引用返信/返信 削除キー/
■4269 / inTopicNo.10)  Re[4]: For〜Nextの拡張、関数色々 投稿
□投稿者/ TomTom -(2005/06/05(Sun) 14:45:50) [ID:7IKyKB1y]
    TomTomです。

    >ファイル操作関係は悪意を持った人がパソコンに害を及ぼさないよう、
    >起動中のシナリオフォルダ外をいじれないようになっていますので、
    >フォルダ関連もそれに準拠させる必要があると思います。

    まあ、その辺は言われるまでも無く承知しています。
    既存のファイル操作コマンドを流用するつもりなので、大丈夫でしょう。
引用返信/返信 削除キー/
■4270 / inTopicNo.11)  Re[5]: For〜Nextの拡張、関数色々 投稿
□投稿者/ 猫王@管理 -(2005/06/05(Sun) 15:25:07) [ID:QqyMSxGB]
    ちょっと調べてみましたが、
    現行の仕様だとセキュリティホールがある様ですね。
    KeiさんとTomTomさんにメールで詳細を送っておきます。
引用返信/返信 削除キー/
■4281 / inTopicNo.12)  ソースコードを投稿しました
□投稿者/ TomTom -(2005/06/13(Mon) 22:25:30) [ID:7IKyKB1y]
    少し遅れましたが、以下の内容でソースコードを投稿しました。

    ・For〜NextコマンドのStep句に対応
    ・InStr関数、InStrB関数の開始位置指定に対応
    ・Replace関数追加
    ・InStrRev関数、InStrRevB関数追加
    ・String関数追加
    ・LSearch関数追加
    ・RegExp関数、RegExpReplace関数追加
    ・Format関数追加
    ・Max関数、Min関数修正
    ・Round関数、RoundUp関数、RoundDown関数追加


    ヒロキさん>
    >・システム変数Nowで取得した時刻を任意のフォーマットの文字列に変換する
    >書式案:DateFormat(Date,fomat)
    >例)DateFomart(Now,"YYYY/MM/DD hh:mm:ss")
    >日時を「2005/06/05 02:30:26」というような形式に変換して返す

    こちらに関してですが、数値・文字列の書式も設定できるように「Format関数」として、
    VBのFormat関数互換で実装しました。


    猫王さん>
    >ちょっと調べてみましたが、
    >現行の仕様だとセキュリティホールがある様ですね。
    >KeiさんとTomTomさんにメールで詳細を送っておきます。

    了解です。ひとまず、フォルダ操作に関してはKeiさんの対応を待ってから実装します。
解決済み!
引用返信/返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Pass/

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

- Child Tree -
- Antispam Version -