受けたアドバイス
ファイルを読み込んで、その内容をDBに更新するシステムを作っている。
処理の流れとしては、
1. パラメータを取得する
2. ファイルを開く
3. ファイルを読み込む
4. ファイル内容をチェックする
5. 更新する
実際においらが書いたコード。細かいところは違うけど。
# ファイルを開く open (TEXT_FILE, "<", "test.txt") or die($!); # ファイルを読み込む while (<TEXT_FILE>) { push (@lines, $_); } # チェックをする while (@lines) { } # ファイルを閉じる close (TEXT_FILE); # DBを更新する
先輩のアドバイス
・while は2回もいらない
-> 1行読み込んで、その時にチェックもすれば良い。あんまり大きなデータファイルではないから大丈夫だとは思うが、これだとあまりよろしくない。
ということでこうした。
# ファイルを開く open (TEXT_FILE, "<", "test.txt") or die($!); # ファイルを読み込む while (<TEXT_FILE>) { push (@lines, $_); # チェックをする } # ファイルを閉じる close (TEXT_FILE); # DBを更新する
【Perl】キー重複について(1)
ファイルの内容をDBに更新する際は、
キー重複がないかどうかをチェックしなければならない。
忘れやすいけど重要。
[前提]
下記のようなテーブルが存在するとする。
キー項目は「名称」と「色」。
名称 | 色 | 値段 |
apple | red | 100 |
banana | yellow | 200 |
peach | pink | 300 |
下記のようなテキストファイルが存在するとする。
sample.txt
apple,red,150
banana,yellow,250
peach,pink,350
先ほどのテーブルに対して、ファイル内容で更新処理をすると、
名称 | 色 | 値段 |
apple | red | 150 |
banana | yellow | 250 |
peach | pink | 350 |
となる。
だけど、この時にキー重複の可能性を考えなくてはいけない。
先ほどの場合は、ファイル内容にキー重複がなかったので良かったが、
次のような場合だとおかしくなる。
sample.txt
apple,red,150
banana,yellow,250
apple,red,350
apple,redというキー項目が同一ファイル内で重複している。
値段を150か350かのどちらで更新すれば良いのかわからナス。
こういう時は「キー重複エラー」ということにしている。
「次のキー項目が同一ファイル内で重複しています: apple, red」
みたいなメッセージを出してあげる。
そうすることで謝った値でのDB更新を防げる。
忘れやすいので注意する。
次は、実際のキー重複チェックのコードを書いてみる。
MacのBetter Touch Tool が有償化になったの?
普段Macを使っているけど、Better Touch Toolアプリが有償化したみたいですね。
MagicMouse2に2本指で上にスワイプすると、ブラウザのタブを切り替える、とかその他もろもろ設定しているので、
なくなるとだいぶ快適ではなくなります。
お金を払おう思うけど、初めてのことなのでどうすればいいかわからないw
英語勉強しよ!w
【Perl】数値の判定をしたいなあ(1)
今業務で作っているシステムで、
数値であるかどうかのチェックをする必要があるので考え中。
<正当条件>
・数値であること
(正数、負数、小数である可能性がある)
例) 123, 12.3, -123, 0
さてどうしようか...
正規表現を今から勉強してまいります。
【Perl】リファレンス
リファレンスを作るには、$や@や%の前に"¥"『バックスラッシュ』をつけてあげる。
デリファレンスする時は、リファレンスの変数の前に
スカラーの場合は$、
配列の場合は@、
ハッシュの場合は%、
をつける。
下は、配列の中にハッシュを設定する、そしてそれを取得する時のやり方。
割とよく使っているかも。
fetchrow_hashrefで受け取ったリファレンスを、ごにょごにょしたりする時とかによく使っている。
#!bin/usr/perl use strict; my %h1 = (dog => "犬", cat => "猫", ); my %h2 = (apple => "りんご", banana => "ばなな", ); my @a; my $h1_ref; # h1(ハッシュ)のリファレンス my $h2_ref; # h2(ハッシュ)のリファレンス $h1_ref = \%h1; $h2_ref = \%h2; @a = ($h1_ref, $h2_ref); print $a[0]->{dog}, "\n"; print $a[0]->{cat}, "\n"; print $a[1]->{apple}, "\n"; print $a[1]->{banana}, "\n";
$a[0]{dog}だと参照できないから注意。
$a[0]->{dog}ね。
慣れてない時は、頻繁になんでじゃーーーーーってなってた。
次は配列の中に配列を設定するやり方。
2次元配列ってやつ。
下は、正しそうで正しくないやり方。
ぱっと見あっている感じがするので、気をつけたい。
#!bin/usr/perl use strict; my @a = qw(1 2 3 4 5); my @b = qw(a b c d e); my @parent = (@a, @b); print "@parent\n"; # 1 2 3 4 5 a b c d e <- 絶賛1次元
正しくはこのようなする。
#!bin/usr/perl use strict; my @a = qw(1 2 3 4 5); my @b = qw(a b c d e); my @parent = (\@a, \@b); print "@parent\n"; # ARRAY(...) ARRAY(...) print "$parent[0][4]\n"; # 5 print "$parent[0]->[3]\n"; # 4 print "$parent[1][0]\n"; # a print "$parent[1]->[2]\n"; # c
$parent[0][0]と$parent[0]->[0]は、表現が違うけど同じ意味。
とりあえず、今日はこんなところで。
もう少し、いやもっと綺麗な日本語を書くように心がける。