matsuo’s blog

新米プログラマ?の備忘録

受けたアドバイス

ファイルを読み込んで、その内容を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]は、表現が違うけど同じ意味。


とりあえず、今日はこんなところで。
もう少し、いやもっと綺麗な日本語を書くように心がける。

emacsをターミナルで開く

備忘録〜

emacs とコマンドを打てば開ける。

Ctrl-z は終了ではなく休止なので注意する。
emacsを終了するコマンドは、Ctrl-x-c。

知らずに5つくらいemacsを起動していたw

Ctrl-zで休止した場合、ターミナル上で「fg」と打つと、
休止中のemacsバッファに戻れる。