なんでも自動処理

自動的に操作してこそコンピュータ

自動化に向いている処理

なんでもかんでもコンピュータ処理すればいいというわけではない。 向いているものは

で、逆に向いていないものは

となる。

宛名シールを作ろう

個人で行なう典型的な「繰り返し」処理といえば「宛名書き」。 練習課題としても適している。

LaTeXの利用

詳細は2003年の講座 のLaTeXの解説に。

LaTeXで宛名的なものを作成する場合は、 atena.tex のような書き方になる。

LaTeXに限らず、文書の原稿は

  1. ヘッダ(書き始めのお約束)
  2. 本体(宛名の繰り返し部分)
  3. フッタ(締めくくりのお約束)

という3つの部分で構成される。このうちの「本体」の繰り返しを Rubyプログラムで作成すると効果的な「自動化」になる。

住所データが以下のようなCSVで書かれているものと考えよう。

addr.csv

998-8580,山形県酒田市飯森山 3-5-1,公益太郎
998-8580,山形県酒田市飯森山 3-5-1,飯森花子
998-0862,山形県酒田市曙町 3.14159265,円山周三
998-0018,山形県酒田市泉町 2.71828,対馬数男
998-0854,山形県酒田市末広町 88888,富士吉宗
998-0075,山形県酒田市高砂 10451,高見山大五郎
998-0113,山形県酒田市広岡新田 1342,大金田博夫

上記のようなCSVを1行ずつ読み込み、区切りのカンマ文字で分割して データを読み取り、LaTeXの文書に合うように埋め込んだものを 出力するプログラムは以下のようになる。

  while line=a.gets
    line = line.chomp		# 改行文字をはぎ取る
    zip, address, name = line.split(",")
    printf "\\begin{screen}
\\begin{minipage}{0.8\\columnwidth}
\\begin{alltt}
{\\large 〒%s
   %s}
\\begin{center}
{\\huge %s 様}
\\end{center}
\\end{alltt}
\\end{minipage}
\\end{screen}\n", zip, address, name
  end

LaTeXの記述部分(青字部分)が 多いので複雑に見えるが実際にRuby的な処理をしている部分に 着目すると以下のような単純なものとなる。

  while line=a.gets
    line = line.chomp		# 改行文字をはぎ取る
    zip, address, name = line.split(",")
    printf "〜〜 %s 〜〜 %s 〜〜  %s 様", zip, address, name
  end

ヘッダ部分と、フッタ部分を出力する部分を追加して プログラムは完成する。

atena.rb

#!/usr/bin/env ruby

print IO.readlines("header")

open("addr.csv", "r") do |a|
  while line=a.gets
    line = line.chomp		# 改行文字をはぎ取る
    zip, address, name = line.split(",")
    printf "\\begin{screen}
\\begin{minipage}{0.8\\columnwidth}
\\begin{alltt}
{\\large 〒%s
   %s}
\\begin{center}
{\\huge %s 様}
\\end{center}
\\end{alltt}
\\end{minipage}
\\end{screen}\n", zip, address, name
  end
end

print IO.readlines("footer")

プログラム実行時に2つのファイルを同じディレクトリに置いておく。

header

\documentclass[10pt]{jarticle}
\usepackage{alltt}
\usepackage{ascmac}
\pagestyle{empty}
\addtolength{\textheight}{2cm}
\addtolength{\topmargin}{-1cm}
\addtolength{\oddsidemargin}{-3cm}
\addtolength{\evensidemargin}{-3cm}
\setlength{\itemsep}{-0.5ex}
\setlength{\parsep}{0ex}
\begin{document}
\thispagestyle{empty}

footer

\end{document}

表計算データとの連系

CSV形式で保存したファイルは、表計算ソフトで問題なく開くことが できる。

% soffice addr.csv &

逆に、表形式のデータをCSVとして書き出すこともできる。 ほとんどの宛名管理ソフトなどでは「CSVへの書き出し」が可能なので、 書き出したCSVファイルを処理する自作プログラムを作成して、 役立てると同時に技術を高めることもできる。

自動化しすぎによる弊害(ウィルスのからくり)


(C)2005 OKOMA Lab. koeki-u.ac.jp