はじめに
今回が初めての投稿となります。
何か不備があるかもしれませんが、よろしくお願い致します。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のソースコードは以下のようになります。
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のソースコードは以下のようになります。
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にて公開しています。もし、興味のある方がいましたらご覧下さい。
最後までご覧いただきまして、ありがとうございました。