perlによるテキスト処理

[テキスト処理のお手伝い] [awkによるテキスト処理] [便利なツール]

はじめに

perlは非常に高機能な言語でテキスト処理のみならず、 バイナリデータを扱ったり、プロセス間通信 を利用できたりするため、幅広いユーザが利用しています。 awkで書けるプログラムは必ずperlで書けますし、 awkでは不可能な処理もperlでは可能なので、 これからどちらか「一つだけ」覚えるつもりなら、 perlを覚えたほうがよいかもしれません。 ただ、単純にテキストデータ(特に表計算ソフトのテキスト出力結果など) を処理するだけならawkのほうが直感的でわかりやすいと思います。

これはほとんど趣味の問題です。 筆者の経験では、 awkの利用者は大体高齢者(30代後半以上)で、若い人はすべてperlで処理してしまうことを好むようです。

ここでは、perlを使った便利なテキスト処理プログラムを紹介します。

注意

perlによる実践的プログラム

機能 解説
ナンバリング テキストファイルの一行ごとに番号を付けるプログラムです。

テキストファイルの反転 これは、テキスト処理になじみのない人にとっては役立つプログラムかもしれません。 やっていることは単純です。

フィールド抽出 この類のプログラムはawkの方が手っ取り早いと思いますが、 もちろんperlでも実現できます。

ダブルコーテーションマークの削除 表計算ソフトで表をテキストとして出力するとき、 各フィールドがダブルコーテーション(二重引用符”) で囲まれてしまうことがあります。 これは、表をテキストファイルとして出力する 形式がカンマ区切りファイルであることと関係があります。 各フィールドをカンマで区切る場合、フィールドの中身にカンマが ある場合を考えてこのような仕様になっていると思われます。 しかし、perlなどで計算する場合には、ダブルコーテーション があると正しく計算できない場合もあります。もちろん、このテキスト をもう一回表計算ソフトで読み込み、出力しなおしてもよいのですが、 ここでは、perlにより実現します。客先から大量のダブルコーテーション つきCSVテキストが送られてきてしまった場合などに役立つでしょう。

最大、最小、平均 これも、表計算ソフトに慣れている人ならそちらのほうがよいと感じるかもしれません。しかし応用は無限です。

順序のランダム化 テキストファイルを順番に並べ替えるには、DOSやLinuxのsortコマンド で簡単にできます。しかし、場合によってはできる限り順序をぐちゃぐちゃ にしたい場合もあるでしょう。その場合はプログラムを組む必要があります。

ファイルの分割 巨大なデータファイルを複数の人で分け合って作業する場合など、 一つのファイルを複数に分けることが必要な場合に有用なプログラムです。

レコード連結(1)要素数が固定の場合
レコード連結(2) 要素数が可変の場合
あるソフト開発会社のサイトに、このような処理を1000件 あたりいくらで請け負う、との 広告を見つけて驚いたことがあります。こんな処理でお金をとるなんて (しかもプログラム開発費用ではなく、件数単位で!) 、 と思いましたが、それぐらい処理方法がわからず悩んでいる人も多いのでしょう。

頻度カウント (一般データ対応) 重複データを含むテキストデータファイルの各データの個数を 数えるプログラムです。 あらかじめソートしていない一般のデータファイルに対応するため 「連想配列」というperlの特徴を利用しています。

頻度カウント (ソート済みデータ対応) 重複データを数えるプログラムです。 あらかじめソートしてあることを前提にしているため、 他の手続き型言語に置き換えることも簡単です。

半角カタカナチェック パソコンの世界ではやっと半角カナが消えたと思っていたら、 携帯電話のせいで復活してしまいました。 しかし、データ処理の上ではやはり半角カナはトラブルの元ですので、テキスト中の半角カナの有無をチェックするプログラムを用意しました。

半角カタカナ修正 チェックだけでは間違いのもとですので 自動的に修正するプログラムも用意しました。 しかし、銀行口座のカタカナのように、小文字カナ(ュ、ィ等)が 大文字に変えられてしまっているデータは復元できません(もとの情報が 失われているので)。 ちなみに当社の取引口座名も「テイ−ケン」であって「ティーケン」 ではありません。 この程度はまだいいのですが、「エヌテイ−テイ−」だと 一瞬とまどいますよね。 早くこの世から半角カナが無くなってほしいものです。

校正支援 awkによるテキスト処理 で紹介している校正支援プログラムと同等の機能ですが、 utf8対応のperlならOSや処理系を選びません。


htmlのチェック
かなり本格的なプログラムです。 htmlをテクストエディタで書いていると、どうしてもタグ忘れや位置の誤りが出現してしまいます。 本格的なチェックをするには、HTML-lint などを利用すればいいのですが、もっと単純なミスだけ手早く修正したい場合もあると思います。このプログラムは単純なので、ちょっとした手直しでhtml以外のマークアップ言語にも応用可能になっています。

注:動作確認はWindows XP 上で Cygwin に含まれるperl(バージョン5.8.2) を利用して行っています。 詳細は こちら

関連リンク

改行コードについて

awkやperlのスクリプトが動かないという場合、改行コードが正しくない場合があります。改行コードについては、 こちら を参照してください。
Tkensaku

TKENSAKU top へ

Copyright © 2004 TKEN