【プログラム初心者】シェルでcsvのデータを扱うプログラムを読んで、改造して遊ぼう part1

初心者は改造命shell
Photo by Luca Bravo on Unsplash

shellでcsvを扱うテクを Sagasoon.
プログラム初心者さんに送る成長の糧シリーズです。
今回は「改造」ということに主眼を置いて進みますね。
2回に分けて紹介します。

さて、今回はCSVの読み込ませるというプログラムを読み、それを改造するという「遊び」をするんですが、その前に、

CSVを読み込んで何かの処理をさせる」なんて、なんの意味があるんだ?

なんて思いがちですが・・・。

CSVを読み込むメリット

たとえばDMを考えますか。
単純に、住所録に書いてある方々へ、DMを送信しましょうってだけのことを書きます。

左の黒い丸からはじまりです。

  1. 住所録読み込み
  2. DM送信

名簿(住所録)を読み込んで、そこに書かれている人たちへ、DM送信(メール送信)するってことです。
一人ずつ、手動でやってたららちがあきません。
自動でやらせる意味が分かってもらえるかと。
また、名簿がCSVだったりりすれば、この話の意味が通じるんじゃないでしょうか。

その前に、shellとかCSVってなんですか?

あ、そうそう。

shellって何?
CSVってなんだ?

ってなる方もいらっしゃるかもですね。

shellについて

一先ず、shellっていうのは、linuxとかで使う「小さなプログラム」ぐらいで覚えておいてください。
細かいことは、下記のリンクをみていただければ。

【プログラム初心者】SSHを使う環境があるならshellを少し覚えておこうpart1
プログラム初心者の方は、やれPHPを覚えよう、HTML/CSSだ、javascriptを覚えようと、色々な言語に挑戦されると思います。とても楽しいですからねー。ただ、1個、追加でshellなんてのも覚えておくと楽ですよ。簡単だけど、いつも面倒だなーって思う手順やらをシェルに書いて実行するなんてこと、とても良くあります。今回は、シェルのお話を書かせてください。
【プログラム初心者】SSHを使う環境があるならshellを少し覚えておこうpart2
プログラム初心者の方は、やれPHPを覚えよう、HTML/CSSだ、javascriptを覚えようと、色々な言語に挑戦されると思います。前回ご紹介したshellのコマンドを使って、簡単なプログラムを書いてみます。いつも面倒だなーって思う手順やらをシェルに書いて実行するなんてこと、とても良くありますので、皆さん、みてみてください。

csvについて

顧客名簿なんてのを思い浮かべてください。

  • 名前
  • 会社名
  • 連絡先

などの項目が、表にまとまってるやつです。
この「表」を、テキストファイルで「カンマ」区切りで保存してあるものを CSVファイル って呼んでます。

こんな感じです。
address.csv

日本太郎,日本〇〇商事,xxx-xxxx-xxxx
日本花子,日本〇〇工務店,zzz-zzzz-zzzz
日本次郎,日本〇〇ペンキ,yyy-yyyy-yyyy

前置きはこのへんで。

shellで読ませる

さて、本題です。
DM送信プログラムを解説するのも、ちょっとあれなので、今回は仮想のサイトを想定して話をすすめますね。

このWEBサイトは、「在庫商品を検索して、その商品がどこにあるか確認する」ってのが目的です。
このサイトに、テストユーザを作りました。
テストユーザを、CSVファイルにまとめました。

id_list.csv

test001,テスト001,テストするときのアカウント1号
test011,テスト011,テスター1号に割り振ったアカウント
test012,テスト012,テスターAさんに割り振ったアカウント

今回は、このテストユーザが、このサイトでどんなことをしたかな?というのを探すことにしましょう。

まずは、サンプル作りです。
CSVを読み込むところだけ、作ってみますね。

#!/bin/sh
cat id_list.csv |
while IFS=, read id name biko
do
  echo "$id ($name) :$biko"
done

catの説明は、こちらの記事で確認してください。

【プログラム初心者】SSHを使う環境があるならshellを少し覚えておこうpart1
プログラム初心者の方は、やれPHPを覚えよう、HTML/CSSだ、javascriptを覚えようと、色々な言語に挑戦されると思います。とても楽しいですからねー。ただ、1個、追加でshellなんてのも覚えておくと楽ですよ。簡単だけど、いつも面倒だなーって思う手順やらをシェルに書いて実行するなんてこと、とても良くあります。今回は、シェルのお話を書かせてください。

catは、猫じゃないです。ファイルの中身を出力するってコマンドです。
whileは「指定した状況になってる間は、do~doneをループしなさい」って命令です。
それが縦棒の「|」で連結されてる感じですね。

簡単に言いと

ファイルを1行ずつ読み込み、中身が無くなるまで繰り返しなさい。
読み込んだ文字は、毎回、do~doneで書いてあることをやりなさい

って感じです。

実行してみると、下記のような結果がでてきます。

test001 (テスト001) :テストするときのアカウント1号
test011 (テスト011) :テスター1号に割り振ったアカウント
test012 (テスト012) :テスターAさんに割り振ったアカウント

入力させた id_list と、形式が変わってでてきましたね。
このファイルを入力させたときは、

test001,テスト001,テストするときのアカウント1号

だったんですからね。
カンマ区切りになっていた1行1行が、要素ごとに取得してくれたんだな?と勘づいてくださいね。

どこで要素ごとに取得したか?

プログラム初心者さんは、こうゆうところで「気づき」とかおきると、プログラムが楽しくなります。

画面にいつだしたんだろ?

画面に出力してたのはどこでしょう?

test011 (テスト011) :テスター1号に割り振ったアカウント

って出てましたね。プログラムをみてみてください。

echo "$id ($name) :$biko"

ってところがありますよね。
似てますね。
ためしに、変えてみてください。

echo "$name って人が $id のIDを使ってます($biko)"

あぁ~。ってなりましたか?

1行読んだ文字をIDとか名前とかの要素にバラバラにどうやってしたの?

画面に出力した時、なんか「変数みたいの」を使ってましたね。

echo "$id ($name) :$biko"

画面に出てたのは、

test001 (テスト001) :テストするときのアカウント1号

です。
なんかにおいますか?

  • $id が test001
  • $name が テスト001
  • $biko が テストするときのアカウント1号

に対応してそうな気がしませんか?
ってことは?
なんか、その前に、こんなことをしてますね?

while IFS=, read id name biko

idとnameとbikoをなんかしてそうですよね?
これらの前に、 read (読み込め)なんて英語も書いてあります。
もう少しみると、IFSのところに「,」(カンマ)もあります。
あれ?CSVってカンマ区切りだったよな・・・。

こうやって「推測」して「改造する」して「遊ぶ」んです。

まとめ

今日はここまでです。
初心者の方は、初めから自分で一からプログラムを作らずに、こうゆうプログラムを改造するほうが勉強になります。
シンタックスなんて勉強する必要ないです。改造しようとしたときに、「どうやるんだろ?」ってその都度知ればいいです。
次回は、このシェルプログラムを、もう少し改造しますね。

【プログラム初心者】シェルでcsvのデータを扱うプログラムを読んで、改造して遊ぼう part2
プログラム初心者さんに送ります。今回は、「csvファイル読み込みプログラムを使って改造しよう」という記事です。初心者の人は、一からプログラムは作らず、誰かのプログラムを改造するところから始めたほうがいいです。「勘」と「洞察」が命。そんな記事です。
【プログラム初心者さんに送る成長の種】「不具合探し」は「成功探し」と理解すべき
プログラミング初心者の方々向けの不具合探し虎の巻です。デバッグ作業(不具合解消作業)ってどうも苦手だなと感じる方はぜひ一読くださいませ!
炭酸野郎

今日も何かを Sagasoonを運用してます。炭酸野郎です。
皆さんの「何か」が探せるべく、記事書いてます。
新卒で中堅SIerに就職→10年ちょいで退職→フリーランス→起業。副業としてのブログに目覚める(今ここ)。
時間作って、色々なことがやりたいお年頃です!

炭酸野郎をフォローする
shell初心者ProgramingIT
炭酸野郎をフォローする
SAGASOON

コメント

タイトルとURLをコピーしました