Category Archive: Perl

post by yamamoto | | 0 | 1,734 views

perl で LDAP の ldif を csv に変換してみよう〜

下記のような LDAP の ldif ファイル(似たファイルならなんでも)を dn, objectClass, uid,... のような csv ファイルに変換するプログラムです。ただ100行未満のプログラムですが、スキーマ(下記はinetOrgPersonというデフォルトのスキーマ)の情報がなくてもアカウントの一覧が作れます。いちいちテキストからExcelにコピペすると百数十件でも死ぬほど時間かかりますね。試していないが、数万件でも軽々変換してくれるだろう〜(^^) LDAP以外のテキストは、35行目の my $patten = "^$header:(.*)"; を弄ってみてください〜。 dn: uid=S0205,ou=mailsys,dc=syokuba,dc=mycompany,dc=co,dc=jp objectClass: inetOrgPerson uid: S0205 sn: hanako cn: Yamato Hanako mail: jugyouina@dep.mycompany.co.jp userPassword:: ************************* structuralObjectClass: inetOrgPerson creatorsName: cn=admin,dc=syokuba,dc=mycompany,dc=co,dc=jp createTimestamp: 20090413032409Z entryCSN: 20090413032409.000000Z#000005#000#000000 modifiersName: cn=admin,dc=syokuba,dc=mycompany,dc=co,dc=jp modifyTimestamp: 20090413032409Z dn: uid=S0206,ou=mailsys,dc=syokuba,dc=mycompany,dc=co,dc=jp objectClass: inetOrgPerson uid: S0206 sn: tarou mail: tarou@jimu.mycompany.co.jp structuralObjectClass: inetOrgPerson creatorsName: cn=admin,dc=syokuba,dc=mycompany,dc=co,dc=jp createTimestamp: 20090413032409Z cn: Ooshiro Kuniko userPassword:: ************************* entryCSN: 20090417025558.000000Z#000001#000#000000 modifiersName: uid=S0206,ou=mailsys,dc=syokuba,dc=mycompany,dc=co,dc=jp modifyTimestamp: 20090417025558Z 【サンプルプログラム】 perl ldif2csv.pl filename.ldif

変換した結果はこちら:

post by yamamoto | | 0 | 485 views

perl memo DBD::CSV csv file name 2

ファイル名を大文字と小文字の両方を使った場合、テーブルのエリアスが使えなくなる。 例えば、 select a.* from herbRecordNo a => エラー select a.* from herbrecordno a => エラーにならない 原因は不明です。><

post by yamamoto | | 0 | 2,099 views

Web Proxy CGI によるプライベートネットワーク内の Web サーバの公開

【ご注意】この方法を利用する際に、セキュリティをよく考慮した上て、自己責任でやって下さい。 やりたいこと 既に公開されている web サーバが(例:www.myweb.com)あります。 ルータの NAT のポート 80 に設定されていないプライベートネットワーク内の別の web サーバ(例:192.168.4.80)もあります。 これを www2.myweb.com として公開したいのです。 使用した方法(他にも方法あると思いますが) CGIProxy を www.myweb.com に設置し、www.myweb.com から 192.168.4.80 をアクセス方法です。 手順 CGIProxy をダウンロードします。 nph-proxy.cgi を編集します。 許可するサーバの設定(192.168.4.80をリストに追加します) @ALLOWED_SERVERS= ('192.168.4.80') ; 拒否するネットワークを編集します。(ルータ192.168.4.1をリストに追加します) @BANNED_NETWORKS= ('127', '192.168.4.1', '172', '10', '169.254', '244.0.0') ; ルータへのアクセスを拒否しないとルータの設定ページが公開してしまうからです。 これで、URLを http:/www.myweb.com/cgi-bin/nph-proxy.cgi/30/http/192.168.4.80/ で外から 192.168.4.80 をアクセスすることが可能です。 30 のところは適当に数字をいれてください。しないと下記のメッセージの画面が出てきます。 WARNING: Entering non-anonymous area! www.myweb.com のリダイレクトの設定 vi /etc/apache2/sites-enabled/000-default 下記を追加します。     <VirtualHost *:80>     DocumentRoot /var/www/www2/     ServerName www2.myweb.com       # Other directives here     Redirect / http:/www.myweb.com/cgi-bin/nph-proxy.cgi/30/http/192.168.4.80/     </VirtualHost>  /etc/init.d/apache2 restart apache2 を再起動します。 基本認証のページをアクセスすると下記の画面が出てきます。

post by yamamoto | | 0 | 611 views

perl メモ 配列のある要素の後ろに挿入

@array =  (1, 2, 3, 5, 6); @array = insert2array( 5, 4, @array); sub insert2array {     my $front = shift;     my $me = shift;     my @list = @_;     my @output;         #print "$#list\n";     #print "$front => $me \n";     if ($#list < 0){         push @output, $me;     } else {             foreach my $item (@list){             if ($item ...

post by yamamoto | | 0 | 774 views

Perl メモ 配列要素のgrep

    my @found = grep ( /$patten/, @chapter);     print $#found+1, "\n";          foreach $found (@found) {         print $found,"\n";         if ($found=~/^(第)(.+?)(章)/){         #if ($found=~/(.*第)(.+?)(章.*)/){             my $ch = $2;             print {ch}."\n";             print $found,"\n";                     }         print $found,"\n";      }

post by yamamoto | | 0 | 759 views

perl memo DBD::CSV csv file name

create table mytable.csv ( id text, name text) このようにSQLを実行させた場合、mytable.csv が作られます。 しかし、この拡張子があるファイル名は、後ほどテーブルのJOINにエラーを起こすことがあります。 例えば、 select a.id, b.name from mytable.csv a, yourtable.csv b where a.id=b.id  どうしてもcsvの拡張子を使いたい場合、ln -s シンボルリンクを作って、mytable.csv => mytable のようにすれば、使えるようになります。 シンボルリンクを作ってからのSQLは下記のなりますね。 select a.id, b.name from mytable a, yourtable b where a.id=b.id

post by yamamoto | | 0 | 895 views

perl memo DBD::CSV Built-in Functions

DBD::CSV で SQL の関数は何が使えるか?ずっと疑問を持っています。 答えは、SQL::Statement::Functions を利用するので、 こちらの Built-in Functions が使えるそうです。 多くありませんね。 min, max, avg, sum, count current_date, current_time, current_timestamp char_length, lower, position, regex, soundex, substring, trim, upper それから、使いたいのが length ですが、char_length しかありませんね。 今度、User-Defined Functions に挑戦してみようと。

post by yamamoto | | 0 | 1,215 views

iPad で Web 開発環境を作る

もちろん、いう必要がありませんが、cydia が使えるのが前提です。必要なものは下記の通りです。 lighttpd Lighttpd SBSettings Toggle lighttpd の設定ファイルを作ってくれる PHP Perl OpenSSH OpenSSL textastic Textastic Code Editor AppLinks /var/www のシンボルリンクを簡単に Textastic の Documents の下に作るため ln -s /var/www /var/mobile/AppLinks/Textastic.app/Documents/www Safari htmlファイル、phpやperl のプログラムは、Textastic Code Editor で編集し、実行は Safari 等のブラウザで確認する。

post by yamamoto | | 0 | 674 views

perl memo UTF-8 文字列の検索

ある UTF-8 のファイルの中身に下記のような簡体字中国語があります。 ーーーーーーーーーーー 14.7.4 间气 qi at sides 左右间气 客气中在司天之气和在泉之气左右的气。司天之气的左间右间和在泉之气的左间右间,合之为四间气。 ーーーーーーーーーーー そこで「。」がない行とある行と区別するため、index 関数を使ってみました。 すると、 # $line はファイルから読み込んだ1行とする index($line,"。") は全部 -1 が戻されますが、 index(Encode::decode_utf8($line),"。") がちゃんとポジションの数字が戻されます。

post by yamamoto | | 0 | 779 views

perl memo UTF-8 の置換え問題

perl 5 ( version 12 )を使ってUTF-8を置換えするとき、うまく行けませんでした。 原因はわかりませんが、下記の現象が起こります。 my $content = "阴阳学说 yin-yang theory 中国古代哲学理论范畴。阴阳的对立统一是天地万物运动变化的根本规律。"; $content = ~s/theory/null/g; print "$content¥n"; 【期待した結果】 阴阳学说 yin-yang  中国古代哲学理论范畴。阴阳的对立统一是天地万物运动变化的根本规律。 【実行結果】 18446744073709551615 原因が分かり方はぜひお教えください。 しばらく下記の関数でやっております。 sub ReplaceAll {     my $string = Encode::decode_utf8(shift);     my $str1 = Encode::decode_utf8(shift);     my $str2 = Encode::decode_utf8(shift);     for (my $i=0 ; $i <= length($string); $i+=length($str1)){         my $pos=index($string, $str1, $i) ;         if ( $pos>=0){             substr($string, $pos, length($str1),$str2);        ...