テキストファイルの中からCJK互換漢字をあぶり出す
先日、メモ帳のテキストにおかしな漢字(CJK互換漢字)があるという感じの記事を書きましたが、そんな漢字をあぶり出すスクリプトを考えましたので今回はその紹介。
スクリプトのPerlで作られており、内容としてはテキストファイルを開いて1文ずつ文字コードを調査していき、コード的にU+F900~U+FF00の文字があったら表示するというものです。
CygwinのPerl環境で動作確認していますが、環境が変わると文字が化けたり正しいコードが取れない可能性があるので参考にする場合はご注意下さい。
文字コード関連でのはまりどころとしては、STDOUTをutf8に設定するところと、テキストファイルをopenするところでutf8を指定するところでしょうか。なお、テキストファイルはutf8(BOMなし)改行(LF)でエンコードされている前提です。
ちょいと汚いですが、以下がコードになります。
#!/usr/bin/perl use strict; use warnings; # エンコードの設定 use utf8; binmode(STDOUT, ":utf8"); binmode(STDERR, ":utf8"); # 文字色の設定 use Term::ANSIColor qw(:constants); $Term::ANSIColor::AUTORESET = 1; print "Script Start...\n"; if (0 != $#ARGV) { die "開くファイルを引数で指定して下さい"; } unless (-e $ARGV[0]) { die "$ARGV[0]は存在しません"; } my $file = $ARGV[0]; # ファイル名 our $cntFind = 0; open(FDI, "<:utf8", "$file"); my $content; # ファイルの全内容 # 一時的に入力セパレータを無効して$contentにすべて読み込む { local $/ = undef; $content = <FDI>; } my $cntLine = 1; my $column = 1; my @chars = split(//, $content); my $compatiCode1 = 63744; # 0xF900 my $compatiCode2 = 65280; # 0xFF00 for (my $x = 0; $#chars >= $x; ++$x) { my $code = ord($chars[$x]); # CJK互換文字を見つけたら表示する if (($code >= $compatiCode1) &&($code < $compatiCode2)) { print BOLD RED "NG"; printf(" line: %4d | col: %3d | char: %s(0x%x)\n", $cntLine, $column, $chars[$x], $code); ++$cntFind; } ++$column; # 1文字処理したのでカラムを+1する # 行末の処理 if ($chars[$x] =~ /\n/) { $column = 1; ++$cntLine; } } close(FDI); print "\n"; print "=============================\n"; print "見つかった数: $cntFind\n"; print "=============================\n"; print "\n"; print "...Script End\n";
なんだかメモ帳の文字が変だぞ?
生麦〜東戸塚に謎の線路がある
vim ことはじめ(Syntax Highlight)
vimにも少し慣れておかないとなぁと、perlのコードを書いたときの話。
emacsなら何もしなくても ".pl" はPerlコードですね!Syntaxハイライトします。となるところだけど、vimの場合はこれを自動的にやってくれないという。
そんなバカなと思って調べてみると、どうやら ~/.vimrc にお作法を書いておく必要があるとのこと。とりあえず以下のように書いたところちゃんとSyntaxハイライトがかかりました。
syntax on set autoindent set expandtab set tabstop=4 set shiftwidth=4 set cursorline set number
参考Webページ
Visual Studio 2015 でOpenCV2.xを使う (第2回)
前回はCMakeを使ってVisual Studio 2015用のOpenCVプロジェクトを生成するところまで紹介しました。
今回は、OpenCVプロジェクトのビルドから動作確認までを見ていきたいと思います。
1. OpenCVプロジェクトのビルド
(Generate実行後)CMakeの [Open Project] ボタンをクリックするか、buildフォルダにある "OpenCV.sln" を開くと、Visual Studio 2015が起動し、ソリューション "OpenCV" が読み込まれている状態になります。
まずはDebug用のバイナリとライブラリファイルを生成したいと思うのので、ソリューションの構成が「Debug」になっていることを確認します。(32bit用の場合は「Win32」、64bit用の場合は「x64」になります)
ソリューションをビルドします。Debugの場合はあまり時間がかからなかったです。
ビルド中は下方にある出力ウィンドウにログが出力されます。ビルドが完了するとその旨が出力ウィンドウに表示されます。エラーや失敗がないことを確認して下さい。
ビルドが正常に終了したら、ソリューションの構成を「Release」に変更して、同様にビルドを行ないます。
以上で、Debug用とRelease用のバイナリとライブラリファイルが生成されたことになります。場所としてはbuildフォルダの下に "bin" と "lib" が作られており、その中にそれぞれ "Debug" と "Release" がある構成になっています。
C:\opencv └─ opencv-2.4.13 ├─ build ├─ sources ├─ LICENSE.txt ├─ README.md.txt └─ build_x86 ├─ bin | ├ Debug | └ Release └─ lib ├ Debug └ Release
2. バイナリとライブラリファイルを配置する
このままのフォルダ構成でも問題はないのですが、見通しをよくするためにファイルを再配置します。
もともとあるOpenCVのbuildフォルダを見てみると、以下のような構成になっています。
C:\opencv └─ opencv-2.4.13 ├─ build | ├─ x86 | | ├─ vc11 | | └─ vc12 | | ├─ bin | | └─ lib | └─ x64 | ├─ vc11 | └─ vc12 | ├─ bin | └─ lib ├─ sources ├─ LICENSE.txt ├─ README.md.txt └─ build_x86
つまり、buildの下に "x86"(32bit用)と "x64"(64bit用)があり、その下にそれぞれ "vc11"(Visual Studio 2012用)と "vc12"(Visual Studio 2013用)があって、その中に "bin"(バイナリ)と "lib" ライブラリファイルがあることになります。
このフォルダ構成になって、vc14(Visual Studio 2015用)のフォルダを作ってそこに先ほどビルド生成したバイナリとライブラリファイルを配置したいと思います。
なお、再配置するファイルは以下の拡張子のものになります。
- exe
- dll
- lib
拡張子がpdb、ilk、expのものはVisual Studioのプロジェクトが使用するファイルなので移動させる必要はありません。
3. OpenCVの動作確認を行なう
ビルド生成して配置したOpenCVのバイナリとライブラリファイルが正しく使えるか確認します。Visual Studio 2015 を起動させて適当な場所にコンソールアプリケーションのプロジェクトを作成します。
OpenCVのサンプルページを参考に適当にプログラムを書きます。
入出力 — OpenCV2 プログラミングブック リファレンス編
プロジェクトのプロパティを編集します。左方の「VC++ ディレクトリ」を選択し、「インクルード ディレクトリ」と「インクルード ディレクトリ」に以下をそれぞれ追加します。
インクルード ディレクトリ | C:\opencv\opencv-2.4.13\build\include |
ライブラリ ディレクトリ | C:\opencv\opencv-2.4.13\build\x86\vc14\lib |
Debug構成およびRelease構成でビルドできることを確認します。ソリューションフォルダの下に "Debug" フォルダと "Release" フォルダが出来ているので、dllファイルを "C:\opencv\opencv-2.4.13\build\x86\vc14\bin" よりそれぞれのフォルダにコピーします
コピー先 | コピー元 |
---|---|
ソリューション名/Debug | C:\opencv\opencv-2.4.13\build\x86\vc14\bin\Debug |
ソリューション名/Release | C:\opencv\opencv-2.4.13\build\x86\vc14\bin\Release |
「デバッグの開始」を実行してうまく動けばOKです。
Visual Studio 2015 でOpenCV2.xを使う (第1回)
OpenCV3がリリースされて1年以上経ちますが、使い慣れたOpenCV2.x系を使って開発したいという方もおられることでしょう。
しかし、OpenCV2.x(執筆時点で最新は2.4.13)をダウンロードしてみると、プレビルドされたバイナリとライブラリファイルはvc11(Visual Studio 2012用)とvc12(Visual Studio 2013用)しかありません。
というわけで、Visual Studio 2015でOpenCV2.xを使おうと思うと、自分でバイナリとライブラリファイルをビルドしなければなりません。手順としては以下のようになります。
- Visual Studio 2015用のプロジェクトを作成するために、CMakeをインストールする
- OpenCVをダウンロードする
- CMakeでOpenCVプロジェクトを作る
- Visual Studio でOpenCVプロジェクトをビルドして、バイナリとライブラリファイルを生成する
今回の記事ではCMakeをインストールしてOpenCVのプロジェクトを作成するところまで見ていきたいと思います。
1. CMakeのインストール
CMakeをダウンロードします。CMakeはソースファイルからビルドすることもできるみたいですが、それには古いCMakeが必要になるので新規でCMakeをインストールする場合は大人しくインストーラー(.msiパッケージ)をダウンロードします。
インストーラーをダウンロードしたら、実行してCMakeのインストールを開始します。下図のようなSetup Wizardが出てくるので [Next] をクリックして次へ進みます。
エンドユーザライセンスに一応目を通して、チェックボタンにチェックを入れてから [Next] をクリックして次へ進みます。
インストールオプションを選択します。特に問題がないようなら「Add CMake to the system PATH for all users」を選択して、お好みで「Create CMake Desktop Icon」をチェックします。
前者は全ユーザーに対してCMakeのパスを通すという意味になります。
後者はデスクトップにCMakeのショートカットを作成するということになります。
CMakeのインストール先を指定します。特に問題ないようならDefaultのままでよいでしょう。[Next] をクリックして次へ進みます。
以上でインストールの準備が整ったことになります。[Install] をクリックしてインストールを開始します。(なお、管理者権限が必要になります)
インストールはすぐ終わります。
インストールが完了すると下図のような画面になります。[Finish] をクリックしてインストーラーを終了します。
2. OpenCVのダウンロード
次にOpenCV2.xをダウンロードします。
VERSION 2.4.13 のところで 「OpenCV for Windows」を選択します。
http://opencv.org/downloads.html
ファイル(自己解凍形式)がダウンロードされたら、実行してファイルの中身を展開します。展開先は任意の場所で構いません。
OpenCV用にフォルダを作成します。分かりやすい場所でよいと思いますが、私の場合は C:\opencv としました。作成したフォルダに展開したフォルダを移動させます。このとき、OpenCVのバージョンが分かるようにフォルダ名を変更しておいたほうがよいでしょう。
フォルダ構成としては次のようなります。
C:\opencv └─ opencv-2.4.13 ├─ build ├─ sources ├─ LICENSE.txt └─ README.md.txt
3. OpenCV用プロジェクトの作成
Visual Studio 2015 でビルドするためのOpenCVのプロジェクトをCMakeを使って生成します。
まずはCMakeを起動します。
上方にある「Where is the source code:」の箇所に先に展開して移動させたOpenCVのsourcesのフォルダを指定します。
「Where to build the binaries:」の箇所にはプロジェクトの生成先を指定します。OpenCVのbuildフォルダを指定すると既存ファイルとごちゃごちゃになるので新たなフォルダを切ります。ここではx64用のプロジェクトを作成したかったので "build_x64"という(存在しない)フォルダを指定しています。
上方の2つのパスを入力した後、下方にある [Configure] ボタンをクリックします。buildフォルダが存在しない場合は、下図のようにフォルダを作成するか聞かれるので [Yes] と答えます。
何用のプロジェクトにするか聞かれるので、32bit用の場合は「Visual Studio 14 2015」、64bit用の場合は「Visual Studio 14 2015 Win64」をプルダウンリストから選択します。
「Optional toolset to use」は空白のままで、コンパイラの選択は「Use default native compilers」のままでよいでしょう。
[Finish] をクリックすると Configureが始まります。
Configureしています...
Configureが完了すると、下図の様な画面になります。画面中央にある赤地のところのチェックボックスによってプロジェクトの設定を行なっていくのですが、普段使いならそのままでよいでしょう。
[Configre] のとなりにある [Generate] をクリックすると、Visual Studio用のプロジェクトが生成されます。
Generate が完了すると下図のような画面になります。[Generate] のとなりにある [Open Project] をクリックすると生成されたプロジェクトが Visual Studio 2015 で開かれます。
プロジェクトはbuildフォルダ(今回の場合は C:\opencv\opencv-2.4.13\build_x64)の下に "OpenCV.sln" という名前で生成されています。
OpenCV.sln をビルドして、OpenCVのバイナリとライブラリファイルを生成する話は次回に書きたいと思います。
参考Webページ
秋イベを振り返る。その7
艦これ秋イベント2016の話です。
E4海域で輸送が完了すると、部隊は左から右へと移りいよいよ殲滅作戦の攻略となります。
編成によって道中4戦ルート、5戦ルート、6戦ルートとあるのですが、最も安定していた4戦ルートで攻略を進めました。
いずれにしても道中には、
- 防空カットイン不発で一発退場の航空戦マス
- 艦隊支援も先制攻撃も通用しない潜水艦マス
- 軽量編成では歯が立たないフラルマス
があり、ようやくボスに辿り着けたとしても通常艦隊で連合艦隊(敵)を相手にしなければならなく本イベント屈指の難易度でした。
はじめは難易度甲でやっていたのですが、ラスダン編成になった途端 異次元の難易度に...(ボス随伴艦のWフラヲ改が明らかに無理)
甲種のクリア報酬が試製甲板カタパルトで手に入れたかったのですが、イベント終了期限も迫っていたので乙種に難易度を下げて攻略しました。
キラ付けして道中支援出しても、5戦ルートは決まってRマスのフラヲ改にやられるかSマスのフラルにやられていたので4戦ルートで進行。航空戦マスで事故があったもののキラキラが付いていれば基本的にボスまでは辿り着けました。(甲種の場合は、辿り着けないほうが多かったけど)
編成は高速統一で、戦艦もしくは正規空母は1隻までというシビアさ。
普段はキラ付けは面倒なため「しない派」なのですが、この海域はキラキラなしでは突破不可なんじゃないかと思いました。