読者です 読者をやめる 読者になる 読者になる

blechmusikの日記

キー・カスタマイズ・ソフトウェア "DvorakJ" の覚え書きをはじめとして様々なことを書いています。

とある表にリンクを挿入する処理の覚え書き

とあるページの表(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
}

今後多用するかもしれない処理なので、場合によってはスクリプトをスタンドアロン化しておこうか。