1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

powershellで書籍索引を名寄せする

Last updated at Posted at 2019-09-21

背景

初投稿です。書籍編集者として働いています。
ゲラの校正などが進み、本づくりもいよいよ大詰めという段階で本文とは別に厄介な仕事になるのが索引の作成です。特に厄介なのが 名寄せ で、これは下記のように Microsoft Excel などに拾った用語とノンブルを「項目-ノンブル」の一対一対応の関係に整形する作業です。
cap_excel.png

↓(面倒!)

いちご  1,5
バナナ  8,9
みかん  10
りんご  1,18

正規表現の文字列置換で上記作業を行う編集部秘伝の紙製マニュアルもあるのですが、もう少し近代的な方法でこの作業を効率化できないかと編集部の PC に入っている powershell でコマンドレットを作成してみました(実行ポリシーは変更済です)。

コード

function Format-Nayose {
    <#
        .SYNOPSIS
        索引を名寄せする
        .PARAMETER delimiter
        項目とノンブルの区切り文字
        .EXAMPLE
        Get-Clipboard | Format-Nayose
        Get-Clipboard | Format-Nayose -delimiter "," # カンマ区切りからコピーした場合
        $hoge -split "[\r\n]+" | Format-Nayose
    #>
    param (
        [string]$delimiter = "`t"
    )
    $object = $input | ConvertFrom-Csv -Delimiter $delimiter -Header "item", "nombre"
    $object | Group-Object -Property "item" | ForEach-Object {
        Write-Output ("{0}  {1}" -f $_.Name, ($_.Group.nombre -join ","))
    }
}

使い方

# Microsoft Excel からコピーして作業する場合
PS > Get-Clipboard -OutVariable cb
いちご	1
いちご	5
バナナ	8
バナナ	9
みかん	10
りんご	1
りんご	18

PS > $cb | Format-Nayose
いちご  1,5
バナナ  8,9
みかん  10
りんご  1,18

# テキストファイルを読み込んで処理する場合
PS > cat .\hoge.txt | Format-Nayose
……

# カンマ区切りの場合
PS > cat .\fuga.csv | Format-Nayose -delimiter ","
……

基本的に一度コンソール上で変数内容を確認してから作業していますので、パイプライン経由での使用のみを想定。自動変数の $input でパイプライン経由で入力を取得して Group-Object で処理整形しています。

powershell は Windows であれば標準装備ですので非エンジニアにもオススメできそうです(ただしダブルクリック・ドラッグドロップで実行できる .vbs.bat に比べるとハードル高)。Officeと一太郎と大量の紙ゲラに埋もれた環境でも、デジタルでの効率化余地は大いにありそうです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?