|
いつもお世話になっております。 文字列の中から月日を抜き出したくて作成してみたのですが、 どう見てもイマイチな感じです。 何か良いのがあれば、ご教授願えませんでしょうか?
dim 入力 = "吉田聡子様 10/5施工" msgbox(P月日(入力))
FUNCTION P月日(var 入力 ) 入力 = STRCONV(入力,SC_HALFWIDTH) 位置 = pos("/",入力) ifb 位置 = 2 then 月 = copy(入力,位置-1,1) 月 = replace(format(val(月),2)," ",0) ifb CHKNUM(copy(入力,位置+2,1)) = true then 日 = copy(入力,位置+1,2) else 日 = copy(入力,位置+1,1) endif 日 = replace(format(val(日),2)," ",0) else ifb CHKNUM(copy(入力,位置-2,1)) = true then 月 = copy(入力,位置-2,2) else 月 = copy(入力,位置-1,1) endif 月 = replace(format(val(月),2)," ",0) ifb CHKNUM(copy(入力,位置+2,1)) = true then 日 = copy(入力,位置+1,2) else 日 = copy(入力,位置+1,1) endif 日 = replace(format(val(日),2)," ",0) endif
GetTime(0) 工事日 = G_TIME_YY4+"/"+月+"/"+日 for i = 0 to 120 Gettime(i-30) 存在する年月日 = G_TIME_YY4+"/"+G_TIME_MM2+"/"+G_TIME_DD2 ifb 工事日 = 存在する年月日 then Result = 工事日 endif next fend
|
No.26 2014/08/25(Mon) 21:30:01
|
☆ Re: 文字列の中から月日を抜き出したくて / なま |
|
|
//何がイマイチかは知りませんが……
dim 入力 = "吉田聡子様 10/5施工" msgbox(P月日(入力))
FUNCTION P月日(var 入力 ) 入力 = STRCONV(入力,SC_HALFWIDTH) 位置 = pos("/",入力)
月 = copy(入力,位置-2,2) 月 = replace(月,"/","") //顧客名なし&1桁月対応 ifb !CHKNUM(月) 月 = copy(月,2,1) endif 月 = replace(format(val(月),2)," ",0) 日 = copy(入力,位置+1,2) ifb !CHKNUM(日) 日 = copy(日,1,1) endif 日 = replace(format(val(日),2)," ",0)
GetTime(0) 工事日 = G_TIME_YY4+"/"+月+"/"+日 for i = 0 to 120 Gettime(i-30) 存在する年月日 = G_TIME_YY4+"/"+G_TIME_MM2+"/"+G_TIME_DD2 ifb 工事日 = 存在する年月日 then Result = 工事日 endif next fend
//基本的な考え方は一緒です。
|
No.34 2014/08/26(Tue) 15:17:53
|
|
☆ Re: 文字列の中から月日を抜き出したくて / stuncloud |
|
|
文字列の解析を正規表現で、正しい日付かどうかのチェックはtryとgettimeでやってみました 日付が見つからなかったり不正な日付だった場合は空文字列を返します
function P月日2(str, y = 0) result = "" if y = 0 then gettime() y = G_TIME_YY4 endif str = strconv(str, SC_HALFWIDTH) // 正規表現で m/d を探す re = createoleobj("VBScript.RegExp") re.pattern = "(\d{1,2})/(\d{1,2})" match = re.Execute(str) if match.count then if match.item[0].SubMatches.count = 2 then // 見つかったら yyyy/mm/dd 形式の文字列を生成 mm = replace(format(val(match.item[0].SubMatches[0]), 2), " ", "0") dd = replace(format(val(match.item[0].SubMatches[1]), 2), " ", "0") date = y + "/" + mm + "/" + dd try // gettimeの基準日として渡す // 存在しない日付だったらエラーになる gettime(0, date) except // エラーになったら抜ける exit endtry // 日付を返す result = date endif endif fend
|
No.36 2014/08/26(Tue) 21:05:20
|
|
☆ Re: 文字列の中から月日を抜き出したくて / sen |
|
|
ありがとうございます。
なま様
//何がイマイチかは知りませんが…… 特別、変な考えではなかったのですね。 「!」を使ってのスッキリしているところが、勉強になります。
stuncloud様
//文字列の解析を正規表現 正規表現だと、1桁月と2桁月の部分が場合分けせずにチェックできて素敵です。 応用も利きそうです。
|
No.102 2014/09/07(Sun) 13:50:19
|
|