2010年9月14日火曜日

仕事用初スクリプト完成記念日

お客さんからの原稿はマイクロソフトのワードかエクセル、はたまたパワーポイントがデフォルトの日々。
プレーンなテキストに落としてレイアウトソフトに流し込みたいのですが、

 ●行頭に挿入されてる全角/半角スペースとタブ。
 ●規則性無く混在する全角半角の欧文と数字、記号類。
 ●未だに普通に使われる半角のカタカナ
 ●その時々の執筆者の気分で変わる受け点『、』『,』

以上のような事情から問題の多いデータになってしまいます。

これらの問題に対して、
『半角カタカナを全角』と『全角英数を半角英数』は『mi』の力を借り、
特に目につく問題に関して、『Perl』でスクリプトを組んで解決を試みました。
任意のディレクトリにある拡張子『.txt』の複数ファイルを処理して別名で保存する仕様です。


#! /usr/local/bin/perl
# rexr

use strict;
use warnings;
use encoding 'utf8';

while (my $file = glob ("*.txt")){

open (FILE, "$file") or die "$!";
my @comp = <FILE>;
close (FILE);

foreach my $line (@comp){
chomp ($line);
$line =~ s/\(/(/g; #半角カッコ『(』を全角へ
$line =~ s/\)/)/g; #半角カッコ『)』を全角へ
$line =~ s/^[  ]+//g; #行頭の半角と全角のスペースを削除
$line =~ s/(\d),(?=(\d\d\d))/$1,/g; #桁記号を半角へ
$line =~ s/(\d+).(?=(\d+))/$1./g; #小数点を半角へ
$line =~ s/,/、/g; #受け点『,』を『、』に
$line = $line."\n";
}

open (NEWFILE, "> procs_$file") or die "$!";
print NEWFILE @comp;
close (NEWFILE);

}


深沢千尋氏と結城 浩氏にアイデアをいただき、無事、動作確認。
正直、メチャメチャ嬉しいです。

多分、突っ込み処満載だと思われますが、とりあえず次に進もうと思います。

4 件のコメント:

ColAct さんのコメント...

こんばんは。
Perlを書いたことも読んだこともないんですけど・・最初にこのWhileループはどうやって抜けるのかな?と思いちょこっと調べました。
While文の条件でのglob 関数が該当のファイルの数だけ値を返すのですね。
なかなか便利な言語ですよね。

FTNzPhoto さんのコメント...

(^∇^)ヤア!
colact君!こんばんは!
プロの君の前でお恥ずかしい限りですが、アマチュアながらスクリプティングっちゅうのはオモロいもんやね。
今宵も「半角カタカナを全角カタカナに変換」を思考してました。まだ完成してません、というより自力でできんにゃろか(; ̄O ̄)
これからAppleScriptとPerlの連携技も覚えていく野望アリ。諦めんとボチボチやってきますねd(^_^o)

kaochan35 さんのコメント...

問題の多いデータ・・・


むふふ
いつも私が書いてる文章そのもの・・・・^^;


ご無沙汰してますです。
mixiから つぶやきはいつも拝見しています。

お元気そうで何よりです。


efu3さんは たしか
お仕事は印刷関係でしたっけ。

アルバムの印刷などの
「完全データ入稿」とかの事もわかります?

トンボデータがどうしたとかの
基本レクチャーみたいな。

ちょっと勉強したいので
もしもご存じでしたら、教えてもらえるとありがたいです。

最近、仕事以外で殆ど写真を撮っていないので、ちょっとさびしい毎日です。

FTNzPhoto さんのコメント...

こんにちはefu3こと高広です。
さて、写真アルバムの件、私のつたない経験でお応え出来ることがありましたらドシドシ協力させていただきますよ。
印刷にも会社によって得意分野が違いますので、的確なアドバイスが出来るか不安はあるのですが、何事にも経験ですのでお気軽にどうぞ。
とりあえず、私のメールアドレスを書き込んでおきます。
efu3zphoto@gmail.com
よろしくお願いします。それでは。。。