Hatena::Grouparaistudy

iwasekiの日記

2007-10-22

[]デスクトップログを保存するためのフォルダを作る はてなブックマーク - デスクトップにログを保存するためのフォルダを作る - iwasekiの日記

ここには書けないけど、仕事上の手間を減らすスクリプトが昨日完成しました。

ずっとやろうやろうと思ってたんだけど、10月に入るあたりで一念発起。書いてる途中で不明なところを色んな人に助けてもらいながら何とかですが。


で、色々実験してたら副産物ができました。

仕事上で色んなログを取得→フォルダ分けして保存したりするわけですが、大した手間じゃないけど、これを使うとちょっと楽になる。動かしたところを隣の人に見せたら笑われたけどね!

#!/usr/local/bin/perl

use strict;

my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year-=100;
$mon++;
my $ymdhm = sprintf("%02d%02d%02d", $year, $mon, $mday);
mkdir $ENV{USERPROFILE} . '/デスクトップ/' . "$ymdhm"."xx_log";

ちなみにこれはちょっと前のソース。今使ってるのはxxの値を聞いて入れた状態でフォルダを作る。

これをランチャに入れておくとちょっと幸せになれ・・・るかな。

DavidDavid2013/06/23 14:47Never seen a bteetr post! ICOCBW

xfxmcyxfxmcy2013/06/24 08:223GyU91 <a href="http://pkiyteadgdqq.com/">pkiyteadgdqq</a>

etoyfzcgaetoyfzcga2013/06/24 20:48yGbRFq <a href="http://juqnvgpupnks.com/">juqnvgpupnks</a>

LineeLinee2013/07/04 02:29I apiatcpree you taking to time to contribute That's very helpful. http://aisdmdg.com [url=http://ubsdbnzhvg.com]ubsdbnzhvg[/url] [link=http://nutuhoaeu.com]nutuhoaeu[/link]

LineeLinee2013/07/04 02:29I apiatcpree you taking to time to contribute That's very helpful. http://aisdmdg.com [url=http://ubsdbnzhvg.com]ubsdbnzhvg[/url] [link=http://nutuhoaeu.com]nutuhoaeu[/link]

LineeLinee2013/07/04 02:29I apiatcpree you taking to time to contribute That's very helpful. http://aisdmdg.com [url=http://ubsdbnzhvg.com]ubsdbnzhvg[/url] [link=http://nutuhoaeu.com]nutuhoaeu[/link]

2007-07-15

[]6章 入出力の基本 はてなブックマーク - 6章 入出力の基本 - iwasekiの日記

ここを更新せずにいた間に、色々書いた6章の下書きがどっかいっちゃった(´・ω・`)

残ってた分だけ更新しとく。

ダイヤモンド演算子

while(<>){
	print;
}

というソースをhogehoge.plとして保存して、

perl hogehoge.pl mogemoge.txt

と実行すれば、mogemoge.txtの値を1行ずつ$_に読み込んでprintする。引数を与えない場合は標準入力となる。whileだと1行ずつ読んで、foreachだと全体を読み込んでから処理をする。ちなみにchompしたければprintの前に「chomp;」と書くだけでいい。

ダイヤモンド演算子は、@ARGV配列)の内容を見て処理をする。引数が渡されると@ARGVリストとしてセットされ、順番に処理される。何もなければ標準入力を待つ。

2つのprint文の出力結果に違いがでる - iwasekiの日記 - 勉強会(仮)で書いた疑問がリャマ本に書いてあった。

print @array;
print "@array";

例えば、@arrayにqw / fred barney betty /という値が入っていたら、1行目はfredbarnybettyと表示し、2行目はfred barney bettyと間にスペースを空けて表示します。

つまり、2行目は配列変数展開されているということ。ちなみに、2行目を使う場合、chompしていないと実行結果の2つ目*1以降から頭にスペースが入ってしまうので、ちゃんとchompしましょう。


printf

出力を指定したフォーマットに合わせて出力する。

%g自動的に浮動小数点数、整数指数形式のどれかを選ぶ
%d10進整数(小数点以下切捨て)
%s文字列
%f浮動小数点数

フォーマットを指定する際、%の後に数値を指定すると、それを出力桁数として表示する。その時整数だと右寄せ、負数だと左寄せ。パーセント記号を表示させたい場合は%%を使う。


練習問題

練習問題1
#!/usr/bin/perl

use warnings;

print reverse <>;
練習問題2
#!/usr/bin/perl

use strict;
use warnings;

print "値を入力してください:\n";
chomp(my @list = <STDIN>);

print "1234567890" x 6 . "\n";

foreach(@list){
        printf "%20s\n" , $_;
}
練習問題3

追加点は断念。

#!/usr/bin/perl

use strict;
use warnings;

print "カラムの幅を入力してください:\n";
chomp(my $width = <STDIN>);
print "文字列を入力してください:\n";
chomp(my @list = <STDIN>);


print "1234567890" x 6 . "\n";

foreach(@list){
        printf "%" . $width . "s\n" , $_;
}

*1:例でいうところのbarney

2007-06-10

[]5章 ハッシュ はてなブックマーク - 5章 ハッシュ - iwasekiの日記

またサボってた

長々やってても仕方ないのでこの章からサクサク読み進めて、要点だけココに吐き出して、プログラムを書くことを優先させよう。

ポイント

練習問題

練習問題1

まず書いたのがこれ

#!/usr/bin/perl

use strict;
use warnings;

my %hash = (
	fred => 'flintstone',
	barney => 'rubble',
	wilma => 'flintstone',
);

print "名前を入力してください:";
my $name = <STDIN>;
chomp $name;

print "$name の苗字は $hash{$name} です\n";

解答を見たらキーがない場合の処理を書いてあったら追加点だというので、追加点を狙いにいってみた。

#!/usr/bin/perl

use strict;
use warnings;

my %hash = (
	fred => 'flintstone',
	barney => 'rubble',
	wilma => 'flintstone',
);

print "名前を入力してください:";
my $name = <STDIN>;
chomp $name;

if (exists $hash{$name}){
	print "$name の苗字は $hash{$name} です\n";
}
else {
	print "その人は登録されていません\n";
};
練習問題2
#!/usr/bin/perl

use strict;
use warnings;

my %hash = ();

print "一行に一つずつ単語を入力してください\n";
print "入力が終わったら Ctrl+D を入力してください\n";

my @input = <STDIN>;
chomp @input;

foreach (@input){
	$hash{$_} += 1;
}

foreach (sort keys %hash){
	print "$_$hash{$_}\n";
}

問題文にあった、

未定義値を数値のように扱うと、Perl自動的にそれを0に変換してくれることを思い出しましょう

をよく覚えておく。ただハッシュを宣言して、+1していくだけでundefから1に変わる。値が数値だと宣言しなくていいのは楽。

2007-05-31

[]4章 サブルーチン(その7) はてなブックマーク - 4章 サブルーチン(その7) - iwasekiの日記

練習問題

練習問題1
#!/usr/bin/perl

use strict;

sub total{
        my $sum;
        foreach (@_){
                $sum += $_;
                }
        $sum;
}


my @fred = qw( 1 3 5 7 9 );
my $fred_total = &total(@fred);
print "The total of \@fred is $fred_total.\n";
print "Enter some numbers on separate lines: ";
my $user_total = &total(<STDIN>);
print "The total of those numbers is $user_total.\n";

実行結果

The total of @fred is 25.
Enter some numbers on separate lines: 1
2
3
4
5
The total of those numbers is 15.

二項代入演算子(+=)が苦手だったりする。・・・慣れかなぁ。

練習問題2
#!/usr/bin/perl

use strict;

sub total{
        my $sum;
        foreach (@_){
                $sum += $_;
                }
        $sum;
}


my @list = 1..1000;
my $out = &total(@list);
print "$out\n";

実行結果

500500

解答を読んでみて凹む。つまりこれでいいということ。

#!/usr/bin/perl

use strict;

sub total{
        my $sum;
        foreach (@_){
                $sum += $_;
                }
        $sum;
}

print &total(1..1000), "\n";

なんでも変数配列ばかり使うのはPerlerっぽくない、ということか。もっとスマートに美しく!・・・道程は長く険しい。

2007-05-30

[]4章 サブルーチン(その6) はてなブックマーク - 4章 サブルーチン(その6) - iwasekiの日記

アンパーサンドを省略する

できるけどしない。してないソースがあったとしてもそれが間違っているとは限らない。

2ページ分を1行にまとめてみた。