とある表にリンクを挿入する処理の覚え書き
とあるページの表(html)に、同一行の年月日の情報に基づいてリンクを機械的に挿入してみた。リンクを挿入すべき箇所は4,000を上回っているため、手作業ではまず対処し得ない課題だといえよう。下記のスクリプトを実行したら、0.3秒弱ですべての置換作業が終了した。
;; utf-8 FileEncoding, CP65001 filename := "z:\input.xml" output_filename := "z:\output.xml" pattern_scan := "<td>(\d{4})</td><td>(\d+)</td><td>(\d+)</td>" pattern_replacement := "(<td>\d{4}</td><td>\d+</td><td>\d+</td><td>)(.+?)(</td>)" tmp_contents := "" FileRead, contents, %filename% Loop, Parse, contents, `n, `r { new := A_LoopField if (RegExMatch(A_LoopField, pattern_scan, $)) { open_link := getLink($1, $2, $3) close_link := "</a>" new := RegExReplace(A_LoopField, pattern_replacement, "$1" . open_link . "$2" . close_link . "$3") } tmp_contents .= new . "`r`n" } FileDelete, %output_filename% FileAppend, %tmp_contents%, %output_filename% return getLink(y, m, d){ return "<a href='/resources/hirayama/editorials/" . y . "/" . getY_M_D(y, m, d) ".pdf'>" } getY_M_D(y, m, d){ return y . add0(m) . add0(d) } add0(i){ return (9 < i) ? i : "0" . i }
今後多用するかもしれない処理なので、場合によってはスクリプトをスタンドアロン化しておこうか。