[date:20121213]の検索結果


さくらインターネットが、低価格VPS「さくらのVPS」に新たに「SSDプラン」を追加し、2012年12月13日から提供を開始した。

今回提供が開始された「SSDプラン」は、メモリ1GB・ディスク50GBが月額1,780円で利用できる「SSD 1G」と、メモリ2GB・ディスク100GBが月額3,680円で利用できるだける「SSD 2G」の2つ。HDDを利用した他プランを遥かにしのぐ高速なI/Oで、 高いストレージ性能が求められるサービス運用やデータベース運用などに最適だという。

[2245] Posted by kagahiro at 2012/12/13 15:37:04
0 point | Link (4) | Trackback (0) | Comment (0)

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

[2244] Posted by kagahiro at 2012/12/13 10:51:25
0 point | Link (4) | Trackback (0) | Comment (0)

  1  


アクセスランキング

今日のアクセスランキング TOP 10

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (91 PV)
  2. USTREAM(ユーストリーム) 日本語版 無料のライブ映像配信サービス (6 PV)
  3. グーグルニュース(Google News)日本版が表示できるURL (4 PV)
  4. 最新のGoogle News(グーグルニュース)日本版のRSSが取得できるURL (4 PV)
  5. [Perl]UTF-8でエンコードされた文字列の文字数を取得するコード (4 PV)
  6. Google Finance(グーグルファイナンス)- リアルタイム株価情報、金融ニュース、日本株 (3 PV)
  7. ウェブページを1回だけリロード(再表示)する方法 (3 PV)
  8. 将棋ウォーズ最強ボット「PonaInfinity(ポナインフィニティ)」が六段にハメ手で全駒される (3 PV)
  9. [将棋]将棋実況ユーチューバーのクロノさんが朝日新聞のクレームで棋譜中継を配信中止 (3 PV)
  10. Google News (グーグルニュース)日本版 (3 PV)

今月のアクセスランキング TOP 10

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (1865 PV)
  2. Tumblr(タンブラー)のダッシュボードからおすすめ投稿を消す(非表示にする)方法 (165 PV)
  3. グーグルニュース(Google News)日本版が表示できるURL (160 PV)
  4. Google News (グーグルニュース)日本版 (152 PV)
  5. [将棋]将棋実況ユーチューバーのクロノさんが朝日新聞のクレームで棋譜中継を配信中止 (151 PV)
  6. 最新のGoogle News(グーグルニュース)日本版のRSSが取得できるURL (150 PV)
  7. [Perl]UTF-8でエンコードされた文字列の文字数を取得するコード (148 PV)
  8. Google Finance(グーグルファイナンス)- リアルタイム株価情報、金融ニュース、日本株 (122 PV)
  9. USTREAM(ユーストリーム) 日本語版 無料のライブ映像配信サービス (107 PV)
  10. Google Finance(グーグルファイナンス)日本版が表示されるようになってますが・・・ (76 PV)

アクセス統計

ディレクトリ

関連サイト