PCの棚卸を機に手元のソフトの更新を図っていた筆者であったが、ありがちな困りごとに遭遇した。

--以前使っていたソフトが使えなくなっている問題である。

様々な用途で使用される便利なソフトウェアたち。業務を何倍にも効率化するものから、無くては仕事が不可能なものまで様々だが、セキュリティや使用環境の条件により使えなくなってしまう場合もある。

筆者の場合はプログラミング言語Perlのインタプリターである。"掲示板"や"チャット"という今ではあたりまえに使われているWebサイトの基本機能を長らく支えていたPerl/CGI。諸先輩がHTML書き出し用途にPerlをローカルで使っていた(フォルダ内にテキストと画像とPerlスクリプトを入れて、Perlをダブルクリックするとテキストと画像が配置されたHTMLを書き出す)のに憧れてローカルで使用できるスクリプトを自身で作成したものだ。

複数画像やテーブルを対話式の数値入力で書き出してくれるもので以来、日常的に使っていた。しかし、予告なしに突如として動かない状況・・・・代替ツールを用意しなければならないと途方に暮れようとしていたところ、ワークエリア環境専用のインストールランチャーに従来は無かったPythonがあるのを発見した。さらに、新たなマシンにはCopilot for work入っている。既存のPerlスクリプトは手元にある。

--おお、そうだ。これら素材を使えば、AIにpythonに書き換えてもらえるのではないか?

以下はPerlで動くスクリプトですがPythonで動くように変えてください

とCopilot for workに早速貼り付けてみた。

"以下は、PerlスクリプトをPythonに変換したものです。Pythonでは、input()関数を使ってユーザーからの入力を受け取り、条件分岐やファイル操作を行います。"と書き出したのが以下になる。

def side():
    global yose
    yose = input("中央なら「c」を右寄せなら「r」を。左寄せなら「l」を:").strip()
    if yose == 'c':
        yose = "center"
    elif yose == 'r':
        yose = "right"
    elif yose == 'l':
        yose = "left"

y = input("通常形式複数個なら「y」を。colspanなら「x」を。テーブルなら「t」を:").strip()

if y == 'y':
    x = int(input("全個数を入力:").strip())
    side()
    with open("gazou.txt", "w") as out:
        for a in range(1, x + 1):
            if a < 10:
                out.write(f"|photo_{yose}\n|I@00{a}.jpg,▲▲▲|\n\n")
            else:
                out.write(f"|photo_{yose}\n|I@0{a}.jpg,▲▲▲|\n\n")

elif y == 'x':
    x = int(input("横の個数を入力:").strip())
    side()
    with open("gazou.txt", "w") as out:
        out.write(f"|photo_{yose}\n")
        if x == 1:
            out.write("|I@001.jpg,▲▲▲|")
        else:
            for a in range(x):
                out.write(f"|I@00{a}.jpg")
            out.write("|\n|M@▲▲▲|")

elif y == 't':
    y = int(input("縦の個数を入力:").strip())
    x = int(input("横の個数を入力:").strip())
    with open("table.txt", "w") as out:
        out.write('<table class="Table1" border="0" cellPadding="0" cellSpacing="1">\n')
        for a in range(y):
            out.write("<tr>\n<th>data</th>")
            for b in range(1, x):
                out.write("<td>data</td>\n")
            out.write("</tr>\n")
        out.write("</table>\n")

else:
    print("end")

果たして動くのだろうか?数カ月前に別のコードで同様のことをやってみたが、何回もやりとりをした記憶がある。上記をtest.pyとしてUTF-8で保存する。恐る恐る、ダブルクリックして試して見ると最初のinput文が表示されている。

  • test.pyをダブルクリックで表示

期待は高まる。続けて、ほかのパラメーターを入力する。

  • yを選択、個数、画像の配置場所を入力

同一階層にgazou.txtが書き出された。ファイルの書き出しまでは成功している。

  • gazou.txtが同一階層に出力

中身はどうあろうか。書き出されたgazou.txtを開いてみると、意図通り、連番のファイル名を振った画像マークアップが出力されている。

  • center配置の連番ファイル名のイメージマークアップが5つ

テーブルの縦・横も確認してみた。縦20、横3のテーブルを手動で作るのは疲れるものだが、

この記事は
Members+会員の方のみ御覧いただけます

ログイン/無料会員登録

会員サービスの詳細はこちら