LoginSignup
2
3

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-06-04

はじめに

今回が初めての投稿となります。
何か不備があるかもしれませんが、よろしくお願い致します。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行づつ読み込んで、変換対象となる行をピックアップして、希望の形に整形して、標準出力にプリントアウトするだけです。

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

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

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

qiita_pstr_0.png

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

セクション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_このセクションのまとめ

(以下、省略)

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

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

qiita_pstr_1.png

次に、ペースターのカスタムメニューを表示して、「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

qiita_pstr_2.png

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

qiita_pstr_3.png

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

Dynalistに貼り付ける

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

qiita_pstr_4.png

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

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

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

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3