Perlによるテキストデータの処理方法について

提供: dococo wiki
2015年12月29日 (火) 00:06時点におけるimported>Webmasterによる版
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

Perl(パール)とは

Perl(パール)とはテキストペースのデータ処理に特化したフリーのプログラム言語である。詳細はWikiPediaのhttps://ja.wikipedia.org/wiki/Perlを参照して欲しい

その中で特筆すべき機能として(WikiPediaより参照)

特徴 ①強力な文字列処理。正規表現をサポート
②日本語をはじめとして世界中の言語を処理可能
③連想配列(ハッシュ)をサポート
④多次元データ構造が利用可能
⑤自由度の高い文法。簡潔にプログラムを記述できる
⑥高い後方互換性を持つ
⑦数多くのオペレーティングシステムで利用可能
⑧プログラムの実行には事前コンパイルは不要
⑨スクリプト言語の中では高い処理速度を持つ
⑩Unicodeのサポート
⑪モジュールによる拡張が可能

個人的に気に入っている機能としては、①・③・⑤・⑧・⑪と言った機能を使うことで、大抵のテキスト処理が出来るので非常に重宝しています。

Perlで何が出来るか

じゃあPerlを使うと何が出来るのでしょうか?簡単に言うと「テキストで書いてある文字や数字をある条件で抽出したり、変換したり、計算したりして、好きな形式に出力出来る」という機能です。絵に表すとこんな感じになります

テキストデータに「リンゴ 10個 1000円」というデータがあったときに、このデータを「林檎 十玉 壱千円」と言うように変換する時にどの様に処理しますか?
数が少なければテキストエディタ等の置換機能を使えば簡単ですが、行数が一億行とか膨大なデータであったり、りんごだけでは無く、もっと種類が増えたりしたらどうしますか?こういう場合にPerlを使用するととても簡単に処理できます

もっと具体的な内容として、「緯度・経度・WiFi電界強度」という膨大なデータがあるとします。この緯度・経度データをメッシュコートに変換して同一メッシュコードに存在するWiFi電界強度は中央値を利用して地図に表示しろ」という課題を解決するためにPerlが非常に役に立ちます。

あとは、AndroidのアプリでLTEの電界強度を取得しながら色々なエリア調査を行う際に、取ってきたデータを自分の好きな情報に加工するために使用したりすることが出来る、例えば、G-MoNの様なアプリを使ってデータ収集をするようなことなど
具体的には

  <Placemark>
  <name>77798400</name>
	<description><![CDATA[Label: <b>NaN</b><br/>CID: <b>303900</b><br/>LAC: <b>16424</b><br/>PSC: <b>0</b><br/>NET: <b>44010</b><br/>TYPE: <b>LTE</b><br/>RXL: <b>-87 dBm</b><br/>QUAL: <b>-8</b><br/>Time: <b>12:21:29 2015/12/18</b>]]></description>
	<styleUrl>#rxl92</styleUrl>
	 <Point>
	  <coordinates>138.91057,35.12693</coordinates>
	 </Point>
  </Placemark>

みたいなKMLファイルがあるとすると、情報は以下のように抽出することが出来る

  • 緯度:35.12693
  • 経度:138.91057
  • CID:303900
  • LAC:16424
  • RXL:-87dBm

このようにテキストで記載されて、ある一定条件で文字列を抽出(抜き出し)したり、抽出した内容を変えたり(置換)、数値であれば計算したりする事が出来るのがPerlというもので非常に便利な言語というわけである

Perlのインストール

Perlのインストールは他のサイトにお任せします。互換性の高いPerlですので、様々なPerlを使っても大丈夫だとは思いますが、このサイトでは私は自分の好きなActive Perlをベースにして説明します。