[文字列]の検索結果
Perlのsubstr関数ではバイト単位の操作になるので、漢字、ひらがな、カタカナなどの全角文字を文字数で指定して
部分文字列を取り出すことができません。それでは不都合なことも多いので、半角英数も全角文字も1文字と...
Perlのsubstr関数ではバイト単位の操作になるので、漢字、ひらがな、カタカナなどの全角文字を文字数で指定して部分文字列を取り出すことができません。それでは不都合なことも多いので、半角英数も全角文字も1文字として部分文字列を取り出すことができる関数を作成します。
以下はそのコードです。[Perl]UTF-8でエンコードされた文字列の文字数を取得するコードと同様に、文字の1バイト目のビットの状態を調べることによってその文字が何バイト文字を判定しています。
#!/usr/bin/perl
use strict;
use warnings;
my $testStr = "ABCDEFGあいうえおアイウエオ愛夢佐々木";
print "substr_utf8($testStr, 0, 5) = " . substr_utf8($testStr, 0, 5), "\n";
print "substr_utf8($testStr, 3, 3) = " . substr_utf8($testStr, 3, 3), "\n";
print "substr_utf8($testStr, 10, 4) = " . substr_utf8($testStr, 10, 4), "\n";
print "substr_utf8($testStr, 13, 5) = " . substr_utf8($testStr, 13, 5), "\n";
print "substr_utf8($testStr, 13) = " . substr_utf8($testStr, 13), "\n";
exit;
# UTF-8でエンコードされた文字列の部分文字列を取り出す
# substr_utf8 (文字列式, オフセット[, 長さ])長さを指定しなかった場合は最後まで
sub substr_utf8 {
my ($src, $offset, $len) = @_;
my $srclen = length($src);
my $pos = 0;
my $count = 0;
my $dest = '';
while ($pos < $srclen) {
my $code = ord substr($src, $pos, 1); # 先頭のASCIIコード値を取得
my $bytelen = _bytesize($code);
if (defined($len)){
if ($count >= $offset && $count < ($offset + $len)) {
$dest .= substr($src, $pos, $bytelen);
}
} else { # 長さ指定なし
if ($count >= $offset) {
$dest .= substr($src, $pos, $bytelen);
}
}
$pos += $bytelen;
$count++; # 文字数をカウント
}
return $dest;
}
# 文字のバイト長を求める
sub _bytesize {
my $code = shift;
my $size = 1;
if (0x80 & $code) { # 1バイト文字以外
$code <<= 1;
for my $i (2 .. 8) {
$size++;
$code <<= 1;
last if (!(0x80 & $code));
}
}
return $size;
}
substr_utf8関数では、substr関数を使用して1バイト目のASCIIコード値を取得し、
_bytesize関数を呼び出して文字のバイト数を求め、その文字がパラメータで指定された範囲の場合は、戻り値として返す文字列に連結し、そうでなかった場合は文字数のカウントアップのみ行なっています。
_bytesize関数ではパラメータで渡されたコード値の場合の文字のバイト数を、コード値のビットの状態から判定し戻り値として返しています。
もっと自在にサーバを使い倒す 業務に役立つPerl (Software Design plus)
技術評論社 著者:木本 裕紀
amazon.co.jpのカスタマーレビューを見る
powered by amalink
Perlのlength関数ではバイト単位となるので、UTF-8でエン
コードされている場合、漢字、ひらがな、カタカナなどは1文字で3となってしまいます。ブログなどのアプリケーションのテキスト処理ではそれでは不都合な場合も...
Perlのlength関数ではバイト単位となるので、UTF-8でエンコードされている場合、漢字、ひらがな、カタカナなどは1文字で3となってしまいます。
ブログなどのアプリケーションのテキスト処理ではそれでは不都合な場合もことも多いので、半角英数も全角文字(漢字、ひらがな、カタカナなど)
も1文字としてカウントする関数を作成することにします。
UTF-8では、
1バイト目の先頭ビットが0の場合は1バイト文字
1バイト目の先頭から3ビットが110の場合は2バイト文字
1バイト目の先頭から4ビットが1110の場合は3バイト文字
1バイト目の先頭から5ビットが11110の場合は4バイト文字
1バイト目の先頭から6ビットが111110の場合は5バイト文字
1バイト目の先頭から7ビットが1111110の場合は2バイト文字
という仕様ですので、1バイト目のビットの状態を調べることによって、その文字が何バイトかを調べることができます。
以下のコードでは、この仕様にもとづいて全角文字を含む文字列の文字数を取得しています。
#!/usr/bin/perl
use strict;
use warnings;
my $testAscii = "ABCDEFG";
my $testHira = "あいうえお";
my $testKata = "アイウエ";
my $testKanji = "愛々木";
my $testAll = "ABCDEFGあいうえおアイウエオ愛夢佐々木";
print "length($testAscii) = ".length($testAscii), "\n";
print "strlen_utf8($testAscii) = ".strlen_utf8($testAscii), "\n";
print "length($testHira) = ".length($testHira), "\n";
print "strlen_utf8($testHira) = ".strlen_utf8($testHira), "\n";
print "length($testKata) = ".length($testKata), "\n";
print "strlen_utf8($testKata) = ".strlen_utf8($testKata), "\n";
print "length($testKanji) = ".length($testKanji), "\n";
print "strlen_utf8($testKanji) = ".strlen_utf8($testKanji), "\n";
print "length($testAll) = ".length($testAll), "\n";
print "strlen_utf8($testAll) = ".strlen_utf8($testAll), "\n";
exit;
# UTF-8でエンコードされた文字列の文字数を取得する。
sub strlen_utf8 {
my ($text) = @_;
my $textlen = length($text);
my $pos = 0;
my $count = 0;
while ($pos < $textlen) {
my $code = ord substr($text, $pos, 1); # 先頭のASCIIコード値を取得
my $bytelen = _bytesize($code);
$pos += $bytelen;
$count++; # 文字数をカウント
}
return $count;
}
# 文字のバイト長を求める
sub _bytesize {
my ($code) = @_;
my $size = 1;
if (0x80 & $code) { # 1バイト文字以外
$size++;
$code <<= 1;
for my $i (2 .. 8) {
last if (!(0x80 & $code));
$size++;
$code <<= 1;
}
}
return $size;
}
strlen_utf8関数では、substr関数を使用して1バイト目のASCIIコード値を取得し、
_bytesize関数を呼び出して文字のバイト数を求め、1文字分の処理を行うたびに文字数をカウントアップしています。
_bytesize関数ではパラメータで渡されたコード値の場合の文字のバイト数を、コード値のビットの状態から判定し
戻り値として返しています。
ゼロからわかる Perl言語超入門
技術評論社 著者:高橋 順子
amazon.co.jpのカスタマーレビューを見る
powered by amalink
PHPの場合は、ズバリ10進数を2進文字列に
変換できるdecbin関数があるので、decbin関数を使用すればいいのですが、もちろん、Perlの場合と同様にビット演算で2進文字列に
変換することもできます。以下は、その
サンプル...
PHPの場合は、ズバリ10進数を2進文字列に変換できるdecbin関数があるので、decbin関数を使用すればいいのですが、
もちろん、Perlの場合と同様にビット演算で2進文字列に変換することもできます。以下は、そのサンプルコードです。
<?php
// 'A'のアスキーコード値を取得
$asciicode = ord('A');
// PHPのdecbin関数で2進文字列に変換し、sprintfで整形
$binarystr = sprintf("%08.8s", decbin($asciicode));
print $binarystr . " (1)\n"; // for debug
// ビット演算で2進文字列に変換
$binarystr = _binstr($asciicode);
print $binarystr . " (2)\n"; // for debug
function _binstr($code) {
$str = '';
for ($i = 0; $i < 8; $i++) {
$str .= (0x80 & $code) ? '1' : '0';
$code <<= 1;
}
return $str;
}
?>
このスクリプトをコマンドラインで実行すると次のように表示されます。
C:\xampp\htdocs\sample>\xampp\php\php binstr.php
01000001 (1)
01000001 (2)
PHPハンドブック (ハンドブックシリーズ)
ソフトバンククリエイティブ 著者:柏岡 秀男
amazon.co.jpのカスタマーレビューを見る
powered by amalink
Perlの関数を使用して、以下の手順で10進数を2進文字列に
変換することができます。sprintf関数で10進数を16進文字列に
変換pack関数で16進文字列をバイナリーにパックunpack関数で2進文字列に
変換例えば、文字列の先頭...
Perlの関数を使用して、以下の手順で10進数を2進文字列に変換することができます。
- sprintf関数で10進数を16進文字列に変換
- pack関数で16進文字列をバイナリーにパック
- unpack関数で2進文字列に変換
例えば、文字列の先頭文字のASCIIコード値(10進数)を取得し、それを2進文字列に変換に変換する場合は、
次のようなコードになります。
#!/usr/bin/perl
use strict;
use warnings;
my $ascii = "ABC";
my $asciicode = ord $ascii; # 先頭文字のASCIIコード値を取得
my $str = _bitstr($asciicode, 8);
print "str = $str\n"; # for debug
exit;
# 10進数を2進文字列に変換する関数
sub _bitstr {
my ($code, $len) = @_;
my $hexcode = sprintf("%X", $code); # 16進に変換
my $bitstr = unpack("B".$len, pack("H2", $hexcode));
}
10進数を単に2進文字列に変換するだけならこれでも構わないのですが、ビット演算子を使ってビットのオン・オフを判定して、
2進文字列を作成していく方法もあります。以下のコードはその実装例です。
#!/usr/bin/perl
use strict;
use warnings;
my $ascii = "ABC";
my $asciicode = ord $ascii; # 先頭文字のASCIIコード値を取得
my $str = _bitstrR($asciicode, 8);
print "str = $str\n"; # for debug
exit;
# ビット演算で10進数を2進文字列に変換する関数
sub _bitstrR {
my ($code, $len) = @_;
my $bitstr = '';
for my $i (1 .. $len) {
$bitstr .= (0x80 & $code) ? '1' : '0'; # 0x80(2進数:10000000)でビット論理積をとる
$code <<= 1;
}
return $bitstr;
}
ここで問題になるのはどちらの方法が処理速度が優れているかということですが、以下のコードのプロファイルを取ると・・・
#!/usr/bin/perl
use strict;
use warnings;
my $ascii = "ABC";
my $asciicode = ord $ascii; # 先頭文字のASCIIコード値を取得
my $str = '';
for my $j (1 .. 10000) {
$str = _bitstr($asciicode, 8);
$str = _bitstrR($asciicode, 8);
}
print "str = $str\n"; # for debug
exit;
sub _bitstr {
my ($code, $len) = @_;
my $hexcode = sprintf("%X", $code); # 16進に変換
my $bitstr = unpack("B".$len, pack("H2", $hexcode));
}
sub _bitstrR {
my ($code, $len) = @_;
my $bitstr = '';
for my $i (1 .. $len) {
$bitstr .= (0x80 & $code) ? '1' : '0'; # 0x80(2進数:10000000)でビット論理積をとる
$code <<= 1;
}
return $bitstr;
}
C:\xampp\htdocs\sample>perl -d:Dprof bitstr3.pl
str = 01000001
C:\xampp\htdocs\sample>dprofpp
Total Elapsed Time = 0.018988 Seconds
User+System Time = 0.016988 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
223. 0.038 0.038 10000 0.0000 0.0000 main::_bitstr
47.0 0.008 0.008 10000 0.0000 0.0000 main::_bitstrR
0.00 - -0.000 1 - - strict::import
0.00 - -0.000 1 - - warnings::import
0.00 - -0.000 1 - - strict::bits
0.00 - -0.000 2 - - main::BEGIN
やはり、ビット演算で2進文字列を作成するほうが早いようです。
プログラミングPerl〈VOLUME1〉
オライリー・ジャパン 著者:ラリー ウォール,ジョン オーワント,トム クリスチャンセン
amazon.co.jpのカスタマーレビューを見る
powered by amalink
単にテキストファイル等の文字エンコードを変換するのであれば、iconvコマンドを使用して変換すれば良いのですが、プログラム内部で取得した文字列の文字エンコードを変換したい場合もあります。以下のプログラムはL...
単にテキストファイル等の文字エンコードを変換するのであれば、iconvコマンドを使用して変換すれば良いのですが、
プログラム内部で取得した文字列の文字エンコードを変換したい場合もあります。
以下のプログラムはLinuxやCygwinの環境でC言語のプログラムからiconvを呼び出して文字エンコードを
変換する場合の手順を示したサンプルプログラムです。
--- tst_iconv.c ---
#include <stdio.h>
#include <iconv.h>
#define BUFSIZE 1024
char outbuf[BUFSIZE];
int convert(char const *src,
char const *dest,
char const *text,
char *buf,
size_t bufsize);
main(void)
{
int ret;
ret = convert("SHIFT-JIS", "UTF-8",
"日本語テストメッセージおはよう",
outbuf, sizeof(outbuf));
if (ret) {
printf("%s\n", outbuf);
}
else {
printf("Oops!\n");
}
}
int convert(char const *src,
char const *dest,
char const *text,
char *buf,
size_t bufsize)
{
iconv_t cd;
size_t srclen, destlen;
size_t ret;
cd = iconv_open(dest, src);
if (cd == (iconv_t)-1) {
perror("iconv open");
return 0;
}
srclen = strlen(text);
destlen = bufsize - 1;
memset(buf, '\0', bufsize);
ret = iconv(cd, &text, &srclen, &buf, &destlen);
if (ret == -1) {
perror("iconv");
return 0;
}
iconv_close(cd);
return 1;
}
コンパイル方法
$ gcc -o tst_iconv tst_iconv.c -liconv
ICONV
HTML::
Templateの<TMPL_VAR>タグは、プログラムでパラメータに値を設定すると、タグの部分がパラメータで設定された文字列で置き換えられるという簡単なものです。以下は、<TMPL_VAR>タグの使い方を示す...
HTML::Templateの<TMPL_VAR>タグは、プログラムでパラメータに値を設定すると、
タグの部分がパラメータで設定された文字列で置き換えられるという簡単なものです。
以下は、<TMPL_VAR>タグの使い方を示す単純なサンプルプログラムです。
--- テンプレートファイル(tmplvar.tmpl)
<html>
<head>
<title>HTML::Templateのサンプルプログラム VAR</title>
</head>
<body>
<h1>HTML::Templateのサンプルプログラム VAR</h1>
<p>
My Name is <TMPL_VAR NAME=NAME> <br />
My IP Address is <TMPL_VAR NAME=IPADDR> <br />
</p>
</body>
</html>
--- CGI(tmplvar.cgi)
#!/usr/bin/perl
use strict;
use warnings;
use HTML::Template;
my $template = HTML::Template->new(filename => 'tmplvar.tmpl');
$template->param(NAME => 'Yamato, Taro');
$template->param(IPADDR => $ENV{'REMOTE_ADDR'});
print "Content-Type: text/html; charset=utf-8\n\n";
print $template->output;
Webサイトの検索機能を利用してウイルスを送り込む攻撃が流行しているそうです。
Webサイトの検索機能を悪用、「IFRAME SEOポイズニング」攻撃が流行大手のニュース
サイトやショッピング
サイトなどでは、
サイト内の情...
Webサイトの検索機能を利用してウイルスを送り込む攻撃が流行しているそうです。
Webサイトの検索機能を悪用、「IFRAME SEOポイズニング」攻撃が流行
大手のニュースサイトやショッピングサイトなどでは、サイト内の情報(記事や商品情報など)を検索できるように検索機能(検索窓)を用意している。そういったサイトの中には、同様の検索が要求された場合に備えて、検索結果をキャッシュしているところがある。キャッシュされた情報は誰でもアクセス可能なので、Googleをはじめとする検索サイトにも収集される。このことを悪用するのが、今回の報告された攻撃だ。
これはキャッシュがどうこうという問題じゃないのではないでしょうか。検索結果のページに検索クエリーの文字列をそのまま含めるようになっているサイトで、検索機能のクエリーパラメータに問題のタグを設定して外部からリンクされると、検索エンジンにインデックスされてしまうので同じ結果になると思います。
これは、いやな攻撃ですね。
かんたんプログラミング Excel2003
VBA 基礎編Excel 2003のマクロ機能の解説と
VBAの基本文法を詳解。かんたんプログラミング Excel2003
VBA コントロール・関数編15個のActiveXコントロール全てと、文字列操作関数、...
かんたんプログラミング Excel2003 VBA 基礎編
Excel 2003のマクロ機能の解説とVBAの基本文法を詳解。
かんたんプログラミング Excel2003 VBA コントロール・関数編
15個のActiveXコントロール全てと、文字列操作関数、日付/時刻操作関数などを中心に解説。
かんたんプログラミングExcel2003 VBA 応用編
ListObjectオブジェクトやAccessとの連携でデータベースを徹底活用。
Excel VBA 実用サンプルコレクション
「基本オブジェクト」「ユーザーフォーム」「データベース」「ファイルシステム」の操作から、「フロー制御」「コードの効率化」まで、 ExcelVBAによる業務処理の作成に役立つテクニックがサンプルコードとして凝縮されている。
独習 Access VBA
理想的なデータベースシステムをAccess VBAで構築できるよう、重要なテクニックが解説されている。
実践ワークショップビジネスに役立つAccessVBA実用マクロ―データベース運用実務と大量データ処理を自動化する335の技
VBAを利用しAccessの面倒な処理や操作を自動化させる方法を、実務レベルで必要とされる豊富なサンプルデータベースとともに紹介されている。
ステップバイステップで学ぶMicrosoft Access 2002 VBA実践講座
Access 2002データベースをVBAを利用して作成する方法を学ぶ自習書。 Accessの機能をフル活用したアプリケーションやインターフェイスについて、実習ファイルを使って段階的に学習できる。
新プログラミング環境C#がわかる+使えるC#をどのように利用するべきかを、言語仕様のトピックごとに詳細に解説。C#によるプログラミングWindows 上Windowsフォーム(Windows.Forms)を有効活用するノウハウを詳解。上巻...
新プログラミング環境C#がわかる+使える
C#をどのように利用するべきかを、言語仕様のトピックごとに詳細に解説。
C#によるプログラミングWindows 上
Windowsフォーム(Windows.Forms)を有効活用するノウハウを詳解。上巻では、C#の基礎、標準的なユーザーインターフェイスの作成法等を、多数のC#クライアントサンプルと共に具体的に詳しく解説。
C#によるプログラミングWindows 下
下巻では、基本的な図形から複雑なBezier曲線の描画や塗りつぶし等のグラフィック出力機能をC#で記述できるようになる。
Visual C#.NET逆引き大全 500の極意
統合開発環境としてのVisual Studio.NETの基本的な利用からWebアプリケーションの開発までについて、初歩的な文法の解説から上級的なテクニックまでのTipsを網羅。
プログラミングC#言語解説 第3版
C#と.NET Frameworkの関係をはじめ、C#の基本構文、クラスとオブジェクト、継承とポリモーフィズム、オペレータオーバーロード、構造体、インターフェイス、配列とインデクサ、コレクション、文字列操作と正規表現、例外、デリゲートとイベントなどが解説されている。
Visual C#.NETによる実践データベースプログラミング
ADO.NETを使ってWindowsアプリケーションを開発するときに必要になる知識をまとめたマニュアル。基本的なデータ操作方法、SQLステートメント、レポートの利用、注文管理などが解説されている。
独習C#
基本的な内容を初心者にわかりやすく丁寧に説明する一方、オブジェクト指向プログラミング言語としてのC#の特徴であるクラスやインターフェイスも詳細に説明。
プロフェッショナルC#〈上〉基本編
C#の基本的な構文やオブジェクト指向プログラミングの原則から、比較的高度な機能まで詳解。
C#エッセンシャルズ 第2版
C#言語の要素をなす文法上の特徴や.NET Frameworkを用いたプログラミング、主な.NET Frameworkのクラスライブラリをコンパクトに解説。
オブジェクト指向スクリプト言語
Rubyに関する書籍。
Rubyの入門書、リファレンス、
Ruby on Railsを使ったWebアプリケーションの開発手法など。たのしい
Ruby 第2版
Rubyではじめる気軽なプログラミング
Rubyを基礎から学...
オブジェクト指向スクリプト言語Rubyに関する書籍。Rubyの入門書、リファレンス、Ruby on Railsを使ったWebアプリケーションの開発手法など。
たのしいRuby 第2版 Rubyではじめる気軽なプログラミング
Rubyを基礎から学び、使いこなすための定番入門書。プログラミング初心者でも理解できる、チュートリアル、基礎、クラス、実践とテーマを分けて平易に解説。
Ruby on Rails入門―優しいRailsの育て方
オブジェクト指向の基本からWebアプリケーションの作りかた、プラグインからテスト、改造までがぎっしり詰め込まれたRuby on Railsの入門書。
オブジェクト指向スクリプト言語Ruby
Rubyの基本的な機能から、オブジェクトの概念、プログラムの設計・プログラミング方法まで、実例を交えながら解説されている。
プログラミングRuby 第2版 言語編
プログラミングRuby 第2版 ライブラリ編
Rubyの定番解説書を、Rubyの作者まつもとゆきひろ氏自身の監訳で翻訳。
Rubyソースコード完全解説
オブジェクト指向言語、Ruby言語の全貌を明らかにする解説書。rubyの構造や言語処理系一般についての知識、ソースコードを読む技術が身に付けられるように解説されている。
Ruby de CGI―Rubyで作るインタラクティブWebサイト
Rubyでメール送信フォーム、Web掲示板などのCGIプログラムを作成する方法が紹介されている。
RailsによるアジャイルWebアプリケーション開発
Webアプリケーションを迅速に開発するためのフレームワーク「Rails」の導入からアプリケーションの配備まで、Railsの全体像がまとめられている。
Rubyレシピブック 第2版 268の技
Rubyプログラミングのノウハウが満載のレシピ集。「文字列」「配列」「数値」「ファイル」「プロセス」「CGI」などをテーマに、サンプルを交えてテクニックを解説。
ライド・オン・Rails Ruby on Railsを徹底攻略
Ruby on Railsの実践的なチュートリアルから、標準ジェネレータ/スクリプトの解説、国際語対応、全文検索、Ajax RSS Readerの作成、エンタープライズ利用など。
|< 先頭へ < 前へ 1 2 3 次へ >
アクセスランキング
- 安全性重視の完全無料ナンピンマーチンEA「Million Dollar(ミリオンダラー)」 #FX #ゴールド #ビットコイン (6 PV)
- 無料のMT4向けナンピンマーチン爆益(爆損)EA「Jipangu(ジパング)」 (5 PV)
- 2NN 2ちゃんねるニュース速報+ナビ (5 PV)
- 自作のMT4向け無料EA(口座縛り無し、ブローカー縛り無し、使用期限無し)とゴゴジャン出品中の有料EAの一覧 #MT4 (3 PV)
- 裁量トレードを自動化する裁量補助EA「AutoScalper Demo」 (3 PV)
- Exness ソーシャルトレーディングの戦略プロバイダーになりました (2 PV)
- Million Dollar Ver 1.09向けの収益性を重視したゴールド(Gold、XAUUSD)ロングセットファイル (2 PV)
- Million Dollar Ver 1.09向けの収益性を重視したドル円(USDJPY)ロングセットファイル (2 PV)
- 完全無料のMT5用ナンピンEA「Nanpin K(ナンピンケイ) MT5」 使用制限無し (2 PV)
- SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (2 PV)
- 2NN 2ちゃんねるニュース速報+ナビ (3281 PV)
- SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (525 PV)
- 安全性重視の完全無料ナンピンマーチンEA「Million Dollar(ミリオンダラー)」 #FX #ゴールド #ビットコイン (101 PV)
- 自作のMT4向け無料EA(口座縛り無し、ブローカー縛り無し、使用期限無し)とゴゴジャン出品中の有料EAの一覧 #MT4 (93 PV)
- SQLiteのSELECT文で上位 (TOP) n件のデータを取得する (76 PV)
- 無料のMT4向けナンピンマーチン爆益(爆損)EA「Jipangu(ジパング)」 (68 PV)
- Million Dollar Ver 1.09向けの収益性を重視したゴールド(Gold、XAUUSD)ロングセットファイル (68 PV)
- 仲値トレードが簡単にできる無料EA「NAKANE3 Ver 2.04」 #MT4 (60 PV)
- [FX]裁量ポジションを簡単に管理できるMT4向け無料の裁量補助EA「PositionKeeper」 (54 PV)
- 2chまとめサイト - 痛いニュース(ノ∀`) (48 PV)
アクセス統計
ディレクトリ
関連サイト