たつをの ChangeLog : 2016-12-12

タイトル文字列だけを使ってシリーズもの(本やDVDなど)を巻数順にソートする方法のメモ。
なんの新規性もない昔から使われている雑なロジックだけど、だいたいはこれで用をなす。

ソートに使う巻数(または年月日)表示の文字は0から9までの10種類。
全角も対象。

テストデータ (test.txt):
ごじょかいは誤じょ解 10
ごじょかいは誤じょ解 4
ごじょかいは誤じょ解 6
今日のステマ料理(10)
今日のステマ料理(1)
今日のステマ料理(5)
今日のステマ料理(11)
暗黒歴史のダイアリー 1
暗黒歴史のダイアリー 2
暗黒歴史のダイアリー 13
週刊漫画GOJO 2016年11月号
週刊漫画GOJO 2016年12月号
週刊漫画GOJO 2016年9月号

単純にソートすると、数値ではなく文字列としてのソートなので、2桁以上の数字ではおかしくなる。下記のように10が4より前になったり。

% sort test.txt
ごじょかいは誤じょ解 10
ごじょかいは誤じょ解 4
ごじょかいは誤じょ解 6
今日のステマ料理(1)
今日のステマ料理(10)
今日のステマ料理(11)
今日のステマ料理(5)
暗黒歴史のダイアリー 1
暗黒歴史のダイアリー 13
暗黒歴史のダイアリー 2
週刊漫画GOJO 2016年11月号
週刊漫画GOJO 2016年12月号
週刊漫画GOJO 2016年9月号

数字を認識し桁を揃えたものに置き換えたのち全体を文字列として比較するという方針で解決。

seriessort.pl :
#!/usr/bin/env perl
# -*- coding: utf-8 -*-
use strict;
use warnings;
use utf8;
use open ":utf8";
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";

my @list;
while (<>) {
    chomp;
    my $str4sort = $_; # ソート用比較文字列
    $str4sort =~ tr/0123456789/0123456789/; # 全角to半角
    $str4sort =~ s{(\d+)}{sprintf("%08d", $1)}eg; # 桁揃え
    push @list, {str => $_, str4sort => $str4sort};
}

foreach (sort {$a->{str4sort} cmp $b->{str4sort}} @list) {
    print "$_->{str}\n";
    #print "$_->{str4sort}\n";
}

先ほどのテストデータを処理してみると、想定通りにソートできている。

% ./seriessort.pl < test.txt
ごじょかいは誤じょ解 4
ごじょかいは誤じょ解 6
ごじょかいは誤じょ解 10
今日のステマ料理(1)
今日のステマ料理(5)
今日のステマ料理(10)
今日のステマ料理(11)
暗黒歴史のダイアリー 1
暗黒歴史のダイアリー 2
暗黒歴史のダイアリー 13
週刊漫画GOJO 2016年9月号
週刊漫画GOJO 2016年11月号
週刊漫画GOJO 2016年12月号

実際に内部でソートの比較で使われている文字列はこうなる。

ごじょかいは誤じょ解 00000004
ごじょかいは誤じょ解 00000006
ごじょかいは誤じょ解 00000010
今日のステマ料理(00000001)
今日のステマ料理(00000005)
今日のステマ料理(00000010)
今日のステマ料理(00000011)
暗黒歴史のダイアリー 00000001
暗黒歴史のダイアリー 00000002
暗黒歴史のダイアリー 00000013
週刊漫画GOJO 00002016年00000009月号
週刊漫画GOJO 00002016年00000011月号
週刊漫画GOJO 00002016年00000012月号

完全ではないにしろ、大体のケースはこれでなんとかなる。桁があふれなければ、「1.10.2」みたいなバージョン表記も大丈夫。

なお、下記の例のようにシリーズものでありながら巻数表記が統一できてないものはどうしようもない。ありがちな巻数表記パターンを羅列すればなんとかなるだろうが面倒なのでスルー。

ごじょかいは誤じょ解 (4)
ごじょかいは誤じょ解 第6巻
ごじょかいは誤じょ解 10

2016年12月12日のヲハニュースをお届けします。

2016 今年の漢字 金

「今年の漢字」は「金」 | NHKニュース
ことし1年の世相を漢字ひと文字で表す「今年の漢字」が京都の清水寺で発表され、リオデジャネイロオリンピックや政治とカネの問題にちなんで「金」が選ばれました。「金」が選ばれたのは、これで3回目です。
また金かよー、的な。
毎年金でいいんだけどオリンピックの年のためにとっておいてる感じ。

風邪のひきはじめに葛根湯は効くか?:朝日新聞デジタル
結論を言うと、風邪のひきはじめに飲んで風邪の悪化を予防すると証明された薬はいまのところありません。葛根湯でも総合感冒薬でも、あるいは薬を飲まなくても、おそらく大差はありません。つらい症状が出ていない段階では、病院を受診しなくてもかまいません。むしろ、インフルエンザなどの他の病気をうつされるかもしれませんので、あまりお勧めしません。
まあそもそも葛根湯も総合感冒薬も万能なものではないし。
咳が止まらない、鼻が詰まって寝づらい、などの生活に支障が出たら医者に行って薬を処方してもらってるな。

「私にはパパが4人いる」 月100万円を手にする“パパ活”の実態に迫る
健全な子育てお父さん活動かなと思ったら……。

函館山ロープウェイ 滑車に挟まれ従業員死亡 | NHKニュース
ううむ

神社のキツネ像を壊した容疑、韓国籍の男逮捕 先月入国:朝日新聞デジタル
うーん

「他人に共感できない人々」がインターネットを回す - いつか電池がきれるまで
「サイコパス=他者への共感能力が低い人」

NAVERまとめに無断転載“された”側の訴え……「抗議への対応に驚愕」 - ITmedia ニュース
LINE側にも炎が来た。

DeNA他キュレーションメディアが起こした”事件”は、検索エンジンが資本主義に負けたということ。 - mediologic
昔の黒いSEOハックは「カネでリンクを買う」というものだったのが、今は「カネでコンテンツを買う」という”資本力によるSEOハック”が成立
うむ。

「MERY」記事量産の現場 「90分に1本のノルマ」インターンが証言 - withnews(ウィズニュース)
人には言えないインターン。
アピール材料のはずが黒歴史に。

怪文書だが、転載しておく
かいぶんしょの、ああかいぶ。
インターネット的だ。

たつをの ChangeLog
Powered by chalow