改行混じりのcsvをperlで処理する

ASPのデータベースからエクスポートされたcsvの集計作業ということで眺めてたら、セル内で改行がある・セル内にコンマがある、という腐ったデータでムカついた(「csvにエクスポート」するんだからコンマや改行の扱いをちょっと考えてくれりゃいいものを)
あちこちの管理画面でエクスポートというとcsv形式になってることが多い。
それをエクセルに読み込んで…
・行や項目の多いシートになると横スクロールに縦スクロールで大騒ぎ。
・改行が混じってるとその行だけセルが異様に広がっていて目障り。
・csvの値は属性を持ってないのでエクセルが勝手に判断してただの数値を日付表示にしたり意味不明の表示になっていることなどざらにあってイライラさせられる。
こういうデータをエクセル上で手作業すると簡単に間違う。わたしは。
なもんで、perlで読み込んで一括処理・集計した方が早いし確実。その場限りの使い捨てのスクリプトを書いて対応している…ところが、perlやAWK、sedなどは行単位での処理が基本。改行の混じったcsv、まさに今回のようなcsvデータは扱いが面倒くさい。
ということで今日もまた「Perlメモ」のお世話になりました。
perlでセルに改行やコンマが入っているcsvデータを処理する。
while (my $line = <DATA>) {
$line .= <DATA> while ($line =~ tr/"// % 2 and !eof(DATA));
$line =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/;
@values = map {/^"(.*)"$/s ? scalar($_ = $1, s/""/"/g, $_) : $_}
($line =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g);
#これでリストに値が入る
}
(出典:http://www.din.or.jp/~ohzaki/perl.htm)
このまま利用させていただきました(ありがとうございます)
今さら知ったこと気づいたこと。
正規表現のパターンマッチは、リストコンテキストで評価すると()でくくった正規表現でひっかかった部分文字列のリストを返す。
$str = ’abcd123efghi543jklmn’;
print $str =~ m!(\d+)!g;
今までこんなケースでは修飾子「g 」は使えないもんだとばかり思っていて 1 while(s/(.+)/$1/) など1つずつパターンマッチさせて処理していた。
scalar関数。リストの要素を数えるぐらいしか使ってなかったんだけど、今回このスクリプトでの使い方がまるでわからず調べてみたところ
scalar は単項演算子なので、EXPR として括弧でくくったリストを使った場合、 これはスカラカンマ表現として振舞い、最後以外の全ては無効コンテキストとして 扱われ、最後の要素をスカラコンテキストとして扱った結果が返されます。
ここでは「””」を「”」にするために使っている。
mapの条件式で部分文字列が「”」で括られていたら、scalar関数に文字列を渡して
「部分文字列をscalar関数のデフォルトに入れて、「””」を「”」に置換して、デフォルトの$_を返す」
左から順番に評価していって、コンマで繋いで各々の結果を切り捨てて、最後に残った式の結果を返すためだけにscalar関数を使っている。トリッキーで面白いなあ。これはループの中で使い途がある。
勉強になりました。
↑以前書いた、コンマの使い方のメモ
人妻・熟女ものが増えたワケ

twitterで見かける、今回の児ポ法の影響で萎縮・自主規制の結果、(安全な)人妻・熟女ものが増えたという話。
もちろん「今回の」児ポ法の影響はあってしかるべきだけど、今に始まったことじゃない・「今回」の法案が決定的な要因ではないだろう。
わたしがエロ漫画編集をやっていた当初の頃からだから、もう30年ほど前から、児童や聖職者(教師、看護婦、警官など)、近親者を対象としたエロ漫画だったり、犯罪を想起させる漫画(ひとコマの中でナイフと顔が一緒に並ぶとかの描写も含めて)は都条例の指定対象となっていた。当時からこの手のテーマ、ストーリー、描写は自主規制してきた。
表現の自由とか言うとよくわからないし面倒くさいことがもろもろあるんだけど、これ描いたら指定されて次はない、という生活のかかった実感のあるところでのやりとりを都庁で(ありがたくないんだけど)頻繁にしていた。
(宮崎事件でいろいろなことが決定的に変わってしまったと思ってんだけど、昔からここはうまくまとまらないので黙っておこう)
なので「今回の」児ポ法が原因と決めつけてしまっては他にあるかもしれない要因が見えなくなってしまわないかと思ってしまう。
人妻・熟女ものが増えたのは、ロリ自主規制よりももしかすると
「エロ本業界の厳しすぎる現状について書きました」-ダリブロ 安田理央Blog
現在のエロ本の読者は40~50代でネットが出来ない人が大半
こっちの方が人妻・熟女ものが増えた理由になってるような気がする。
エロ漫画、エロ本で抜いていたのがたぶんこの通り40代〜50代だろう…まさにわたしがそうなんだけど。となるとその対象はやっぱりそのぐらいの年齢まで広がるもので「売れるから」人妻・熟女ものが増えた、というのが正解だと思ってる。
雑誌などの紙媒体じゃないけど。動画配信サイトなどでも「熟女」「人妻」は売れるジャンル。ネットができるできないに関わらず、人妻・熟女は売れる時代になったということかも。
少子高齢化。これからの日本は徐々に黄昏の世界に入っていくんだろうなあ、という感想で終了します。
猛禽カフェに行ってきた

去年暮れに行ったふくろうカフェとは、またちょっとコンセプトが違った今回の「鷹乃眼」。
カフェに梟や鷹がいるのではなくて、梟や鷹のスペースが広くてカフェはおまけ。その分、鳥の数は多くて鳥たちはゆっくりしていたように見えた。

モルモットやウサギ、羊、ハムスターなど小動物と直接遊べるコーナーが動物園にあるけど、それの梟&鷹バージョン。手に乗せたり触ったり(注意事項は守って)自由に遊ばせてくれるところだった。
ちらっと写真に写ってるガラス越しの狭いカウンタースペースがカフェ。

このふたりがべったりくっついてるなあ、と思ったら「好き同士」らしい。
スタッフさんいわく、仲のいいのとか悪いのがいて集団生活は鳥もひとも大変ですよと。実際、仲が悪い鳥同士を近づけると両者威嚇を始める。鳥の種類ではなくて、個々で仲のいい悪いがあるのが意外で面白かった。



鳥の種類も多くて、眺めて触って写真を撮っていたら1時間があっという間だった。
鷹も各種いて、各人肩から頭に乗せて写真を撮ったり遊ばせてもらった。エサを投げたり羽を広げさせたり…いや、最初は突かれたりしたらどうしようとか、ちょっとビビってたんだけど、彼らは大人しいというか余裕があるというかで全然平気だった。鶏やチャボの方が凶暴ですよ、とスタッフさん。ちなみに、鷹が本気になると足・爪がヤバいとのこと。
鷹の写真はひとが映り込んでるものばかりでここに載せられないのが残念。
自分が写ってる分なら少し晒そう。むさ苦しいのはすみません。

少し手を動かすとバランスを取るためか羽を広げる。軽く羽ばたくだけなのに風圧をはっきり感じる程だった。


ハゲを鷲掴み…って、全然痛くない。掌(?)の暖かみが薄い髪を通して伝わってきた。爪は切ってるんだそうだ。

レッツゴー3匹の図。
このデカイ梟は、爪切りなど嫌なことをするのが獣医(男)スタッフさん(男)なので、男が嫌いらしい。女性だともっとフレンドリーとのこと。
「鷹乃眼」
http://1st.geocities.jp/takanomesky/01/index.html
押上、スカイツリーエリアということで
「スパイスカフェ」でカレー
http://www.spicecafe.info/home

粒マスタードがごろごろ入っていて、じんわり辛くなってくるカレーだった。古民家を改造して雰囲気の良い美味しいお店でありました。
「キルフェボン」で無花果のタルト

銀座などにあるタルトの店がスカイツリーのソラマチに入っている。ここのタルトはベタ甘くないのでおっさんのわたしでも好きで、この時期「無花果のタルト」は絶品。
昼頃から飲み屋まで半日たっぷり遊んだ土曜日でありました。
書店で電子書籍販売

電子書籍を書店で買うのか、ということなんだろうけど、わたしはこれなら十分ありだと思った。

写真がショボくてわかりにくいけど、店内の柱部分を使って電子書籍ダウンロード用のカード「BooCa」がずらっと並ぶ。
(こっちが詳しい→「楽天とBookLive!が参加ーーリアル書店で電子書籍が買える「BooCa」4書店で提供開始」)
実際に見るとけっこう楽しい。
神保町の三省堂は以前からLideoのコーナーというか電子書籍のコーナーもあって、チラシ・パンフレットと実機があるんだけど、これだと何か電子教材でも売ってんのかぐらいにしか見えなかった。
今回のBooCaはカード。
1つのカードが1つのタイトルとなっているので「へえ、あの本が電子書籍で売ってんのか」「ん?これってどんな本だろう」と、とてもわかりやすいし、興味を引かれる。表紙が印刷されていると強い・キャッチー(底本を元にしたイメージと注意書きがあって、権利関係など大変そう)で、つい手を伸ばしてしまう。
書店にいて飽きないのは「ぶらぶら歩いて表紙や背表紙を眺めて引っ張り出して、ぱらぱら立ち読みする」のが楽しいから。カードになってると書店内回遊の流れの中に違和感なくすんなり入るから回遊時間も伸びる。巡回しなきゃいけないエリアが増える。
もともと書店は1つのタイトルでハードカバーがあって文庫本がある。どちらを選ぶかは買う側の理由。これらに電子書籍がカードという現実になって選択肢の1つになったということ。カタチとても大事。
帰りの電車で読みたいというのなら紙本を買えばいいし、今日は飲み会だし帰ってから読めばいいやというのなら電子書籍も選択肢に入るだろうし。
カードは中身を丸ごと立ち読みはできないので、せめて冒頭の何ページ分かをカードに掲載してほしかったかなあ(同じ売場にその本があるからそっちを読めばいいだろうというのは怠慢)
んで、こんなことを書いておいてアレすぎるんだけど。
対象の電子書籍ストアは楽天koboとBookLive!…いちおう楽天koboの会員ではあるけど今回はまだ買っていない。
自分で売る側から言うといろんなストアに並べるべし!とか言ってんだけど、買う側として現状kindle一択。
「あの本どこで買ったっけ?えーっと」
と、本棚以前にアプリを開いて探してまた別のアプリを開いて探してというのがけっこう面倒くさい。
…という自分都合でちょっと腰が引けた。書店での販売が常設になるなら考えないとなあ。

神保町交差点の立ち食い蕎麦「いわもと」美味かった。
ストアごとのリンク生成

今日時点、ウチが電子書籍で有料販売しているのは kindleストアと iBookstoreの2つ(無料販売をしているのはiBookstoreとgoogle playブックス、楽天koboの3つ)
ひとつのタイトルを複数のストアで販売しているような場合、ほとんどのところがやってるように「タイトルがあってそこにストアが複数ぶら下がる」表示形式の方が当然わかりやすい…kindleで始まっちゃったもんだから、データの持ち方を間違えていてAmazonのasinをキーにしているので修正が面倒くさいということもあって放置してた。また、AWSのこともあってウチのサイトはあちこちにasinを使ってるはずなんだけど、5分前の自分はすでに他人なので、まるで覚えていない。
影響範囲が大きいので別ページで試してから徐々に修正していく(徐々にkindle以外にも並べるべく)
まずは「EPUB3::かんたん電子書籍作成」の右サイドのコンテナでお試し。データベースはいじらずにスクリプトに配列をベタベタ書いて作ってみた。
スクリプト自体は使い回しだし、目新しいこともなく簡単に出来たんだけど、ちょっと気になったのがレギュレーション。
ストアへリンクするのにロゴなど画像を使った方がキャッチーでわかりやすいのは間違いない。kindleの利用規約や商標利用に関するページや、App Storeマーケティグガイド系のPDFをざっとみて…よくわからなかったのでロゴ画像を使うのはやめた。
(といいつつ、App StoreのPDFはこんな使い方しちゃダメですよ、と画像つきでレギュレーション解説があってわかりやすかったです、はい)
サイトを辿ってみると、デザインに合わせてロゴを加工して使ってるところがあるなあ。
また(c)表示も GyaO http://gyao.yahoo.co.jp/ct/anime/ を見るとページの一番下にごちゃーっとひとくくり。昔から雑誌なんかでも見るやり方ではあるけど、本当なら作品の近くになきゃいけない、はず。
目立たないのでOKのケース、力関係でOKのケース。
ということで、小心者で善良な納税者のわたしは触らぬなんちゃらの日和見。うーん、我ながらデザインだせえ。
今回のperl小ネタ。配列を order by random。
for(my $i = @array; --$i){
my $j = int rand( $i+1);
next if $i==$j;
@array[$i,$j] = @array[$j,$i];
}
(出典:http://www.din.or.jp/~ohzaki/perl.htm)
いつも参考にさせていただいている 「Perlメモ」 のまんま(ありがとうございます)
今さらながら配列のスライスでこんなことができる(for文の最後の行)なんて知らなかった。
[06/19 08:37:59] 追記。
この雑記帖の上に配置してみた。
・カテゴリ電子書籍一覧を表示している時
・ひとつの記事を表示している時
の2パターン。うるさかったら外そうと思ったけど意外に違和感もなかったのでアクセスの様子見してみる。
| << | 2026/2 | >> | ||||
|---|---|---|---|---|---|---|
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
【最近の20件】
- 20260129 ブログをレスポンシブ対応にリニューアル
- 20260126 ブログのふり返り
- 20260121 小ネタ:ed25519秘密鍵公開鍵とJson serialized canonical
- 20260120 ActivityPubは自作実装しよう!
- 20260117 RFC9421版HTTP Signatureに対応
- 20260111 HTTP Signatureの署名対象文字列
- 20260109 web本棚のActivityPub対応
- 20260106 web本棚のソースコード公開
- 20260104 web本棚
- 20260101 謹賀新年2026
- 20251231 2025年ふりかえり
- 20251213 perlと30年
- 20251210 ActivityPubの投稿削除
- 20251101 日常雑感
- 20251026 テキトーフェッチメール
- 20251014 ActivityPubサーバーで投稿の編集
- 20251008 元WINDOWS10のノパソにlinux mint
- 20251002 GBLシーズン「変わりゆく物語」でACE到達
- 20250925 ブログのアクセス制限
- 20250922 ActivityPubサーバーに引用を実装


