Perl
指定フォルダ内の重複ファイルを検出するプログラムを参照の事。 サイズ0のファイルが検出されたり、3つ以上の重複ファイルが2つ以上の組み合わせに分かれていたりと、大量のファイルを扱うには不便な箇所が色々と見つかったので、修正。 空のファイルを無視…
サクラエディタではユーザーが作成したマクロを登録でき、キーマクロ(mac)や、その他WSH(Windows Scripting Host)で使用可能なスクリプト言語(js, vbs等)を使って記述することもできる。 WSHがサポートしていればPerlスクリプト(pls)も使えるので、それで複…
キーワードが含まれているかを判定 Perl(=~を使った場合) my $text = "apple banana cherry"; print ($text =~ /banana/ ? "yes\n" : "no\n"); Perl(!~と!/.../を使った二重否定) my $text = "apple banana cherry"; print ($text !~ !/banana/ ? "yes\n" : …
my $text = 'apple banana cherry'; if ($text =~ /banana/) { print "YES\n"; } else { print "NO\n"; } def text = 'apple banana cherry' if (text ==~ /banana/) { println "YES" } else { println "NO" } 同じ正規表現パターンでも、Perlでは"YES"、Gro…
DBI経由でPostgreSQLに接続し、データの登録/参照を行う。 問題 CSVファイルの内容をDBに登録する DBとテーブルはPgAdmin3で用意する。 CSVファイル(sample.csv) name,email,address "山田 太郎",taro.yamada@xxx.com,"東京" "田中 次郎",jiro.tanaka@xxx.c…
XMLファイルを読み込んで内容を表示する。 ソースコード use strict; use warnings; use utf8; use IO::File; use XML::TreePP; use Data::Dumper; binmode STDIN, ':utf8'; binmode STDOUT, ':utf8'; binmode STDERR, ':utf8'; # Input Check if (@ARGV != …
XMLファイルを読み込んで、マップ形式で表示してみる。 ソースコードは以下の通り use strict; use warnings; use utf8; use IO::File; use XML::LibXML::Simple; use Data::Dumper; binmode STDIN, ':utf8'; binmode STDOUT, ':utf8'; binmode STDERR, ':ut…
モジュールはXML::LibXMLを使用。 問題 XML書き出しスクリプト name, email, addressを入力して、XMLでファイルに書き出す。(項目名はプロンプトとして表示する。) 実行結果 $ perl output_xml.pl name : 山田太郎(改行) email : taro.yamada@xxx.com(改行…
CSVを扱うと同時に、パッケージモジュールの扱いにも慣れさせるための問題と解答例。 モジュールはText::CSV_XSを使用。 問題 CSV書き出しスクリプト name, email, addressを入力して、CSVでファイルに書き出す。(項目名はプロンプトとして表示する。) 実…
こちらは日本語文字列(ひらがな/カタカナ)を扱う処理。 問題 ひらがな→カタカナ(キー入力→画面出力) 実行結果 $ perl kana_h2k.pl あいうえお カキクケコ(改行) アイウエオ カキクケコ さシすセそ タちツてト(改行) サシスセソ タチツテト (Crtl+Dで終…
研修生に教えるための問題と解答例を作ってみた。 問題 英小文字→英大文字(キー入力→画面出力) 実行結果 $ perl uppercase.pl abcde(改行) ABCDE This is perl program.(改行) THIS IS PERL PROGRAM. 12345xyz ZYX67890(改行) 12345XYZ ZYX67890 (Ctrl+Dで…
標準入出力経由でファイルの入出力を行う perl program.pl < infile.txt > outfile.txt この場合、STDINから読み込まれるのはキーボード入力ではなくファイルinfile.txtの内容となる。 また、print命令で画面に表示する代わりにファイルoutfile.txtに書き込…
数値で範囲演算子を挟む事で数値が1ずつ増える数列の配列が作れる。 ソース1-1 my @num_list = (0 .. 10); print join (', ', @num_list) . "\n"; ソース1-2 print join (', ', (0 .. 10)) . "\n"; 出力結果1 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 文字列でも同…
普通に実行する `$command`; print `$command`; system($command); 戻り値を受け取る my $result = system($command); 標準出力を受け取る my $result = `$command`; open my $rs, "$command |"; my @rlist = <$rs>; close $rs; my $result = join '', @rlis…
ファイル入出力や標準入出力は、binmodeでエンコーディングを設定しておけば、自動的に内部コードに変換されるが、環境変数やコマンドライン引数は変換されない事があるため、別の処理で内部コード化する必要がある。 その処理をサブルーチンとして用意して…
クエリの中に複数のテーブルでリレーションを作った場合、SELECT文で取り出す際のフィールド名は、「テーブルA.フィールドB」という風に表される事がある。特に、複数のテーブルに同じフィールド名が使われている場合、これがないとフィールドの区別が付かな…
サブルーチンを使わずに、さらに短縮してみる。 my %table_hash = map{ my $name = $_; my $fh; open $fh, '; close $fh; map { $_ =~ s/[\r\n]$//g } @text; $name => [ map{ [split(',', $_)] } @text ]; } ('a', 'b');
カンマ区切りデータをまとめる map不使用 my $fh; my @table; my $table_hashref = {}; open $fh, ') { $line =~ s/[\r\n]$//g; my @record = split(',', $line); push @table, \@record; } $table_hashref->{'a'} = \@table; open $fh, ') { $line =~ s/[\r…
2バイト文字のコードにエスケープ文字コード「0x5c」(¥または\)が含まれるいわゆる「ダメ文字」をマッチングパターンに使う際、文字データをそのまま使うと意図したマッチング結果にならない場合がある。 そこで、これを避けるためにマッチングパターンに含…
指定したフォルダ内の(サブフォルダ内も含む)全てのファイル名とサイズを取得し、同じサイズのファイル同士を比較して、内容が全く同じファイルを検出するPerlスクリプト。 UTF8用なので、ソースコードもUTF8にする必要がある。Shift-JISにする場合は、"¥"…
文字列を複数行として扱う修飾子「m」を付けると、改行文字による行区切りの後を行頭、前を行末と見なすので、行頭・行末アンカーを置き換えなくてもそのまま使える。 $text = "12345\nABCDEFG\n12345\n"; print '=' x 10 . '(1-0)' . '=' x 10 . "\n"; prin…
マッチングパターン「.」に改行文字を含める場合、マッチング修飾子「s」を用いるが、行末アンカー「$」を付けた場合に、キチンと行末(改行の前もしくは文字列の末尾)を認識するマッチングパターンは以下のようになる。 (?:(?:$)|(?=[\n])) 行頭・行末それ…
改行文字を含む文字列をマッチング対象とし、改行文字もただの文字として扱う場合、オプションにsを付けるが、行頭アンカー(^)を付けた文字列をマッチングパターンにすると、うまくマッチングしない不具合が起こる。 そこで、行頭アンカーを"(?:(?:^)|(? my …
Perlで全角2バイト文字をマッチングすると、CP932(ShiftJIS)環境では文字区切りが存在しないため、誤判定や文字化けの元になる。 UTF8にコード変換すれば一発で解決するが、機種依存文字などの特殊文字や、複数の区分に重複登録されている文字などの関係で、…
金村さんに教えてもらった参考サイト Perl 5.8.x Unicode関連 404 Blog Not Found:perl - Encode 入門 perl5.8のUnicodeサポート Shift-JISテキストを正しく扱う WindowsでPerlを使うもんじゃない
Accessデータベースのテーブルからフィールド名を取得する方法 ODBC経由でデータベースと接続するには my %TYPES = $db->ColAttributes(SQL_COLUMN_TYPE_NAME); TYPESにはフィールド名と型名のハッシュマップが格納される。
Win32::OLEモジュールを使うと、PerlからWordやExcelなどのファイルにアクセスできるようになる。ExcelシートからCSV形式への変換は、xlsファイルから読み込んだブックのセルの内容を取得し、カンマで連結したものをシート別にファイルへ書き出す方法と、xls…
ODBCはWindowsで標準サポートされているデータベースドライバで、他の言語からでも使える。 JavaでJDBCを使ったが、そのようなものだろう。 Perlの場合はDBIモジュールからデータベースとして接続できるらしい。 ODBCによるAccess操作 SQLステートメント
配列の末尾の添字を得るには @TEST_ARRAY = (1 .. 5); print $#TEST_ARRAY . "\n"; @TEST_ARRAY = (); print $#TEST_ARRAY . "\n"; 4 -1 配列を後方から参照する添字の書き方 @TEST_ARRAY = (1 .. 5); print $TEST_ARRAY[-1] . "\n"; print $TEST_ARRAY[-2] …
今日はPerlの文字列処理に集中。 Perlの文字コードに関する操作 例えば、CP932で書かれたファイルをバイナリデータとして読み込み解析する場合、Perlだと内部コードはUTF8になるので、文字列リテラルとの照合の際、そのままだと正しい結果にならない。 さら…