概要
前回の記事「Perlスクリプトファイルをexe化したい」で単純なテキストを表示させるスクリプトをexe化しました。
今度は、GUIでファイルを選択して、テキストデータを整形するプログラムをPerlで作ってみたくなりました。
環境
前回と変わりません。
- Windows 10 Home
- 64 ビット オペレーティング システム
- 20H2
- OSビルド:19042.1165
- perl v5.32.1 built for MSWin32-x64-multi-thread
- C:\Strawberry\perl\bin/cpan script version 1.676, CPAN.pm version 2.28
Perl/Tkのインストール
参考サイト1. Perl/Tk を使った GUI プログラミング (前編)を見ながらTkというモジュールをインストールする。これを使うとGUIアプリが作れるらしいです。
cpan> install Tk
中略
C:\STRAWB~1\c\bin\gmake.exe install UNINST=1 -- OK
1~2分でインストールが完了しました。
GUIアプリ化するコード
これも参考サイト2. Perl/Tkで日本語のファイル名を使う(Win32)のコードを少し変えます。
- 日本語ファイルは想定していないのでその部分を削除
- ファイル選択後に表示せず、テキスト処理するようにする
- 変数名がわかりにくいので変更
text_process.pl
#!usr/bin/env perl
use utf8;
use strict;
use warnings;
use Tk;
use Encode;
my $main_window = new MainWindow;
$main_window->Button(-text=>'ファイル選択',-command=>\&text_process)->pack;
MainLoop;
sub text_process{
my $filename=$main_window->getOpenFile;
return unless($filename);
open(my $fin, $filename) or die "$!:cannot open $filename\n";
my @lines = <$fin>;
my $text = join("",@lines);
close($fin);
#ファイル読み込み
open(IN, $filename) or die "$!";
#書き込みファイル作成
open(OUT, ">output.csv");
#ファイル全体を丸呑み
$text = do { local $/; <IN>};
#テキストを置換したり、なにか処理
$text =~ s/ +/ /g; #文中のスペースを削除
$text =~ s/^ / /g; #文頭のスペースを削除
$text =~ s/\n//g; #改行を削除
#中略
#出力
print(OUT "$text");
#ファイルを閉じる
close(IN);
close(OUT);
}
exe化
pp -o text_process.exe text_process.pl
実行結果
テストデータは公開できませんが、うまいことデータが整形されました。
終わりに
誰かが散々やっていそうですが、はじめて自分でGUIアプリを作れたのでメモとして残しておきます。これを気にみんなが使える便利なスクリプトをどんどん作っていきたいですね。