目的の処理を実行するには、
イロイロな方法があったりします。
そんなお話を少々脱線しながら・・・
www.youtube.com
【システム屋小話】目的地にたどり着くにはイロイロな方法があります 【三流君】 - YouTube
Q.町田駅から東京駅に行くには?
A1.町田 → 新宿 → 東京
町田
|
|小田急
↓
新宿
|
|JR中央線
↓
東京
主要な駅を経由して説明しやすく間違いも少ない?
※初見だと新宿の乗り換えで迷うかも?
ぉぃぉぃそんな迷うヤツいないぞ。。。
A2.町田 → 代々木上原 → 大手町 → 東京
町田
|
|小田急線
↓
代々木上原
|
|東京メトロ千代田線 .
↓
大手町
|
|東京メトロ丸ノ内線
↓
東京
地下鉄を組み合わせて使うパターンだけど、
なれるとカッコイイ?
※乗り換えを説明するのが面倒だったり・・・
A3.町田 → 新横浜 → 東京
町田
|
|JR横浜線
↓
新横浜
|
|JR新幹線
↓
東京
新幹線を使ってはいけない...
と言われていないので
料金気にしないでギャグで提案してみる
まぁ、好き嫌いはありますが、
目的地に着くには、いろいろな方法があります。
なんて、一般的な例を出しつつ、
ここから
システム屋さんプログラミングのお話に強引に移行すると、
プログラム、プログラミングも同様で、
目的の処理を実行するには、
イロイロな方法があったりします。
Q.VBAを使って、文字列(HTMLのソース)から
.gifの画像ファイル名を探し、そのファイル番号を取り出す。
ファイル名は0.gif 1.gif ... 9.gif と 数字1文字+.gifです
例)
データ1 下記のテストデータの場合、3.gifの3を取り出す
<img src="../img/3.gif" width="20"
height="20" />
データ2 下記のテストデータの場合、5.gifの5を取り出す
<img src="../img/5.gif" width="20"
height="20" />
まぁ、みなさんの頭の中で、イロイロな処理方法が浮かんだと思います。
A1.文字列の位置が決まっているなら いつも固定なら←ココ重要
Mid関数で指定位置を抜き出す
Option Explicit 'データ1 下記のテストデータの場合、3.gifの3を取り出す '<img src="../img/3.gif" width="20" height="20" /> 'データ2 下記のテストデータの場合、5.gifの5を取り出す '<img src="../img/5.gif" width="20" height="20" /> Const TESTDATA1 = "<img src=""../img/3.gif"" width=""20"" height=""20"" />" Const TESTDATA2 = "<img src=""../img/5.gif"" width=""20"" height=""20"" />" Sub test20160715_a1() 'MID関数を使う 'TEST1 Debug.Print "test1 " & TESTDATA1 Debug.Print test_mid(TESTDATA1) '作成した関数を呼ぶ 'TEST2 Debug.Print "test2 " & TESTDATA2 Debug.Print test_mid(TESTDATA2) '作成した関数を呼ぶ End Sub '18番目の文字を返すだけの関数 '関数にする必要もないけど・・・ Public Function test_mid(strHTML As String) As String Dim strRETURN As String '戻り値 '受け取った文字列の18盤目を一文字取り出し、リターン値にセット strRETURN = Mid(strHTML, 18, 1) 'リターン値をセット test_mid = strRETURN End Function
A2.n番目を探すのが面倒なので、
InStr関数で.gifを探し、一文字前を返す
'n番目を探すのが面倒なので、 'InStr関数で.gifを探し、一文字前を返す Public Function test_instr(strHTML As String) As String Dim strRETURN As String '戻り値 Dim n As Integer '受け取った文字列から.gifを探す n = InStr(strHTML, ".gif") '受け取った文字列のn盤目-1を一文字取り出し、リターン値にセット strRETURN = Mid(strHTML, n - 1, 1) 'リターン値をセット test_instr = strRETURN End Function
見ていて、おもしろかった 回答
A3.Replace関数で冒頭の固定文字を消して、頭一文字目を返す
'Replace関数で冒頭の固定文字 <img src="../img/ を消して、 '頭一文字目を返す Public Function test_Replace(strHTML As String) As String Dim strRETURN As String '戻り値 Dim strTEMP As String '作業用文字列 '受け取った文字列から <img src="../img/を置き換えで消す strTEMP = Replace(strHTML, "<img src=""../img/", "") Debug.Print "strtemp=" & strTEMP '↑作成した作業用文字列の左から一文字をリターン値とする strRETURN = Left(strTEMP, 1) 'リターン値をセット test_Replace = strRETURN End Function
A4.Split関数で .gifを条件に文字列を分割
分割後の右端の一文字目を返す
'Split関数で .gifを条件に文字列を分割 '分割後の右端の一文字目を返す '<img src="../img/3.gif" width="20" height="20" />を.gifで分割 '<img src="../img/3 'と '" width="20" height="20" /> に 分割 Public Function test_Split(strHTML As String) As String Dim strRETURN As String '戻り値 Dim strTEMP As Variant 'Splitが可変の配列を返すのでVariant '受け取った文字列を.gifで分割 strTEMP = Split(strHTML, ".gif") Debug.Print "strtemp(0)=" & strTEMP(0) Debug.Print "strtemp(1)=" & strTEMP(1) '↑作成した作業用文字列(0)の右端 お尻 右から一文字をリターン値とす る strRETURN = Right(strTEMP(0), 1) 'リターン値をセット test_Split = strRETURN End Function
終わりのあいさつ
A3やA4 が 私が出会った、おもしろかったコードです。
目的地に着くには、目的を達成するには、
いろいろな方法があると思っていただければ。
が、狙いだったけど、
実際は、
・乗り換えの簡単さ ※複雑な乗り換えやコードはNG
・コスト 時間や料金
を気にしないといけないんだけどね。
余談・脱線?:
いろいろなルート・方法の例題で
電車でいく方法を説明してたけど
極論を書くと、
予算無視、時間無視なら、、
自宅からタクシーで東京駅に行く
家の前
|
|タクシー
↓
東京駅
なんて柔軟な発想もアリかな
※ぉぃぉぃ そりゃないか
みなさんも、柔軟な発想でいろいろな道を進んでくださいね。
下記、冒頭の動画と同じです
https://www.youtube.com/watch?v=0i7mehG4A-s
【システム屋小話】目的地にたどり着くにはイロイロな方法があります 【三流君】 - YouTube
www.youtube.com
次回予告
ア.固定コードは 仕様変更に弱い、バグ祭り・・・
イ.ネットの世界で関東ローカルな例題はよくないよね
の
二本かな。期待しないで待っててくださいね。