テキストエディター上のテキストをPerlやPythonで直接加工する方法


はじめに

今回が初めての投稿となります。
何か不備があるかもしれませんが、よろしくお願い致します。m(_ _)m

PerlやPythonを使ってテキスト加工を行う場合には、既存のファイルからテキストを読み込むのが一般的だと思います。

ペースターというソフトを使うと、エディター上のテキストを選択して、そのままPerlやPythonのプログラムで加工することができるようになります。
もし、ご興味がある方は読んでみて下さい。

PerlやPythonの準備

現在のシステムに、PerlやPythonがインストールされている必要があります。
Pythonのようにシステムの環境変数(PATH)に登録することを推奨していない言語の場合には、ペースターのデータフォルダにある「ProgLangPathName.txt」というファイルにパス名を記述しておきます。

ペースターの準備

ペースターというのは、Windows10/8で動作する常駐タイプのソフトで、ドネーションウェア(カンパウェア)として公開されているものです。主要な機能は、定型文の貼り付けと、クリップボード履歴の貼り付けを行うものです。

また、タグというものを使用すると、エディター上で選択されているテキストを、いろいろな形で加工することができます。大文字/小文字の変換、全角/半角の変換、Perl互換の正規表現を使用したテキスト変換、URLエンコード、Base64エンコード、FIFOペースト、連番ペースト、などいろいろな機能があります。

このタグの中に、PerlやPythonのプログラムで選択テキストを加工するものがあります。

ペースターは、下記のホームページからダウンロードできます。
オータムソフトのホームページ

Perlのプログラムを作成する

ここでは、Udemyというオンライン学習サイトから、あるコースの講座内容をエディター上にコピーしてきて、それをDynalistなどのツールに貼り付ける、という事例を紹介します。
早速ですが、Perlのソースコードは以下のようになります。

udemy_course_text.pl
use strict;
use warnings;
use utf8;

# 今回、入出力はShift-JISで行います。(UTF8も可能です)
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';

while (<>) {
    my ($sec_count, $mov_count);

    if (/^\s*セクション(\d{1,}):\s*(.*)$/) {
        # セクションの行をピックアップ
        $sec_count = sprintf("%02d", $1);

        print "Section${sec_count}_$2\n";
    }
    elsif (/^\s*(\d{1,})\.\s{1,}(.*)$/) {
        # 各動画の行をピックアップ
        $mov_count = sprintf("%02d", $1);

        print "\t${mov_count}_$2\n";
    }

    # それ以外の行はスルー
}

Pythonのソースコードは以下のようになります。

udemy_course_text.py

import sys
import io
import re

sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='cp932')
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='cp932')

reg1 = re.compile(r'^\s*セクション(\d{1,}):\s*(.*)$')
reg2 = re.compile(r'^\s*(\d{1,})\.\s{1,}(.*)$')

while True:
    try:
        line = input()
    except EOFError:
        break

    m = reg1.search(line)
    if m: # セクションの行をピックアップ
        print("\n#Section{0:02d}_{1}".format(int(m.group(1)), m.group(2)))
        continue

    m = reg2.search(line)
    if m: # 各動画の行をピックアップ
        print("\t{0:03}_{1}".format(int(m.group(1)), m.group(2)))
        continue

このソースは、ホームページからコピーしてきたテキストをタブ記号をインデントにして、きれいに整形するものです。プログラムはとても単純で、ダイアモンド演算子で1行づつ読み込んで、変換対象となる行をピックアップして、希望の形に整形して、標準出力にプリントアウトするだけです。

ペースターのことはまったく意識する必要はありません。ただし、冒頭にあるような文字コードの指定は必要です。

テキストデータを準備する

以下のように、ホームページからテキストをコピーします。

それを、そのままテキストエディターに貼り付けます。

セクション1: はじめに
2 / 2|4分

1. Windows版Camtasia9がおすすめな理由
2分

2. このコースで学ぶことの全体像
1分
セクション2: カムタジア9の基本操作
7 / 7|14分

3. このセクションで学べること
1分

4. カムタジアを起動して録画の初期設定をする
4分

5. 新規で画面を録画する
2分

6. 外部からファイルを挿入する
2分

7. 画面全体の構成
2分

8. メニューバーの使い方
3分

9. このセクションのまとめ
1分

(以下、省略)

これを上記のPerlのコードで処理すると、以下のように出力します。

Section01_はじめに
    01_Windows版Camtasia9がおすすめな理由
    02_このコースで学ぶことの全体像
Section02_カムタジア9の基本操作
    03_このセクションで学べること
    04_カムタジアを起動して録画の初期設定をする
    05_新規で画面を録画する
    06_外部からファイルを挿入する
    07_画面全体の構成
    08_メニューバーの使い方
    09_このセクションのまとめ

(以下、省略)

ペースターから、どのように呼び出すのか

まずは、エディター上に貼り付けた、変換元のテキストを全選択します。

次に、ペースターのカスタムメニューを表示して、「Udemyのコーステキストの取得」コマンドを実行します。このコマンドは、カスタムメニューファイルの中で、以下のように定義されています。

[P12 ~\udemy_course_text.pl]というのがタグで、「現在選択されているテキストをカットして~\udemy_course_text.plのプログラムに渡して、出力されたテキストをキャレット位置に貼り付けよ」という意味になります。

Udemyのコーステキストの取得 | 
    [P12 "%PERSONAL%\Visual Studio Code\Perl\udemy_course_text.pl"]
    ; [P32 "%PERSONAL%\Visual Studio Code\Perl\udemy_course_text.py"]
/E

すると、選択されているテキストがカットされて、すぐに整形されたテキストが同じ場所にペーストされます。初回の実行時のみ、Perlのエンジンをロードする関係で1~2秒かかりますが、それ以降は0.5秒くらいで変換できます。

このような感じで、テキストエディター上のテキストをPerlのプログラムで直接加工することができます。

Dynalistに貼り付ける

最後に、整形されたテキストを全選択してDynalistに貼り付けます。Dynalistは、タブ記号をインデントとして扱ってくれるので、Perlのプログラムではそのように出力しています。WorkFlowyへの貼り付けも同様に行えます。

ちなみに、上記の操作の動画による実演デモをYouTubeにて公開しています。もし、興味のある方がいましたらご覧下さい。

ペースターの使い方 #06 Perlとの連携について

最後までご覧いただきまして、ありがとうございました。