940 :
デフォルトの名無しさん:2009/10/07(水) 17:06:28
>>939 >
>>936 > これはどういう処理でしょうか…?
処理の「なかみ」を誤解して書いたものです。
>
>>937 誤りかもしれないと思い直し、手順確認です。
perlで作れるかわかりませんが、スクリプト作成お願い致します。
にこさんうどからmp3を取得するperlスクリプトを作成して頂きたいのです。
http://nicosound.anyap.info/ イメージ的には、
「get_nico_sound sm12345」「get_nico_sound nm54321」
などのコマンドを入力することによって
mp3がダウンロードされれば良いと考えております。
wgetでダウンロードを試みても上手くいかなかったので…
どなたかよろしくお願い致します。
氏ね
ニコニコ静画から指定したジャンルの画像を自動で落としてくるプログラムお願いします。
947 :
デフォルトの名無しさん:2009/11/28(土) 03:22:17
とあるプログラムで出力データファイル名、取引先名、出荷商品数の合計を1つのテキストファイルに出力をするスクリプトをお願いします。
卸売りをする中小企業で働いている者で、かなり昔に作られたプログラムの出力データファイルが存在し、
出力されたデータファイルは1000ファイルほどあり、自社名略称 商品コード略称 拡張子というファイル名です。
例えば、自社名がJALだとしたら、jal110b.ors(拡張子orsとありますが、実際はただのtxtファイルです。)となります。
出力データファイルの中身は最初の10行くらいは商品の説明や仕入先、原価などが書いてあり、その下に出荷をした企業の詳細が書いてあり、
No 取引先名 価格 値引き 出荷商品数 日付 備考
1 NCA 700 100 40 001112 担当○○様
2 BKG 700 20 001113 担当XX様
3 AOK 700 100 32 001113 出荷予定日は00年11月13日だが、担当者不在なので11月15日に延期
4 NCA 700 10 001115 追加分
といった行列が存在します。他の担当者の方が、出力データファイル名と取引先名のみが書かれたリストを作成し、
そのリストを読み込んで、出力データファイル名、取引先名、出荷商品数の合計を1つのテキストファイルに出力するプログラムを
最初はPerlを少しかじったことのある私でも組めるだろうと思っていたのですが、
取引先によって、値引きが書いてあったり書いてなかったりするので、splitで分割をすると出荷商品数の列が合わなくなり困り果てています。
948 :
947:2009/11/28(土) 03:23:33
こういうデータの入ったファイルから、出力データファイル名、取引先名、出荷商品数の合計を
以下の例のように1つのテキストファイルに出力するスクリプトを書いてはいただけないでしょうか?
このファイルを読み込み、(左から、出力データファイル名、取引先名)
110b NCA
110c KBA
110d NCA
... 下にまだ300行近くあります
以下を1テキストファイルに出力。(左から、とあるプログラムで出力データファイル名、取引先名、出荷商品数の合計)
jal110b.ors NCA 50
jal110c.ors KBA 79
jal110d.ors NCA 80
よろしくお願い致します。
タブ区切りのファイルなの?
値引きがない場合はタブが連続して二つ付いてるとかならまだわかるけど、
説明の読んでもどうやって値引きが書いてないかを判別すれば良いのかわからんな。
他のフィールドは必ず書かれてるっていうのなら区切った後に配列の数が一つ少ないかどうかで判断できるけど。
950 :
デフォルトの名無しさん:2009/11/28(土) 04:21:45
>>949 確認したところスペース区切りです。
出荷商品数を列にそって計算するといった方法はPerlではできないのでしょうか?
>>950 出荷商品数までに何文字あるか分かればできると思う
40文字あるとした場合には、
foreach(@table){
/^.{40}[0-9]*?([0-9]+)/;
$count += $1;
}
それよりインプット側のファイル内の表の部分だけ抜き出すのをどうするかのほうが大事だと思うんだが
改行区切りされてても例えば企業の詳細なんかに改行使われてたら難しくなりそうな
一度Ruby辺りを使って、取引先名と出荷商品数のみを全抽出したがいいかもね
いやgrep検索でいけるだろ
どっちにしても列があってないと厳しいな
確実じゃないが、splitで切るよりも文字数範囲指定で抽出がベストか
賢者求む
#!/usr/bin/env perl
use strict ;
use warnings ;
sub get_sum {
my ($name, $sbj ) = @_ ;
my $sum = 0 ;
open my $fh, '<', $name . '.ors' or die ;
while (<$fh>){
next if ! /^\d+\s+$sbj\s+(?:\d+\s+){1,2}(\d+)\s+\d{6}/ ;
$sum += $1 ;
}
close $fh ;
return join "\t", $name, $sbj, $sum ;
}
while (<>){
printf "%s\n", get_sum split /\s/, $_ ;
}
1. 上を適当な名前(get.pl)で保存。
2. perl get.pl DATABASE
で実行。( DATABASE は、
>>948 の入力ファイル)
注)
1. DATABASE の 110b とかは、「自社名略称 商品コード略称」が連結されてる
フォーマットだよね? ちがうならちょっと手なおしが必要。
2. スペース区切りは本当にスペース? 全角空白だったらお手上げ。
3. 日付が 6文字の数字決めうち。
ニコニコ静画から指定したジャンルの画像を自動で落としてくるプログラムお願いします。
お聞きしたいことがあります。
土曜日、日曜日の0〜9時はエラー
月曜〜金曜の0〜18時は〜エラー
それ以外はOK
という感じにしたいのですが、
&time_data;
if($ww eq Sat or Sun and $hour>=0 and $hour<9){&error("エラーです");}
elsif($ww eq Mon or Tue or Wed or Thu or Fri and $hour>=0 and $hour<18){&error("エラーです");}
これだと全部エラー判定になるのですが、どこをどう修正すればいいでしょうか。
よろしくお願いします
>>958 スレ違い
if($ww eq 'Sat' or $ww eq 'Sun'){
if($hour>=0 and $hour<9){&error("エラーです");}
}
else{
if($hour>=0 and $hour<18){&error("エラーです");}
}
960 :
958:2009/11/28(土) 16:40:24
すいませんスレ違いでした。
ご修正ありがとうございました。うまく機能しました
961 :
デフォルトの名無しさん:2009/11/28(土) 19:30:08
>>956 ありがとうございます。
説明不足があった点があるので書いておきます。
110bというのは、商品コード略称のみです。正確には、jal110b.orsが正しいのですが
このリストをまとめた人が、自社名略称と拡張子を省略しているため、110bのみになっています。
スペース区切りはスペースで問題ありません。
962 :
961:2009/11/28(土) 19:36:33
さらに追記です。
文字数を計算したら、一応規則的に並んでいるのが分かりました。
出荷商品数の数字の部分は左から35文字目から始まるのですが、
$name, $sbjはそのままで、出荷商品数の合計値を文字数で換算して狙い撃ちはできないものでしょうか?
>>955 の
my ($name, $sbj ) = @_ ;
を
my $name = 'jal' . $_[0] ;
my $sbj = $_[1] ;
へ変更。
×printf "%s\n", get_sum split /\s/, $_ ;
printf "%s\n", get_sum split /\s+/, $_ ;
にしたら望みの結果が得られるはず。
>>962 文字数が固定してるなら、substr 関数で切り出せばいいよ。
あとはゴリゴリとコードを書くだけ。
perlでcsvをphpとかcgiに出力できますかね。
できます。
967 :
デフォルトの名無しさん:2009/11/29(日) 00:36:39
>>941はもう無理ですかね…
どなたかお願い致します。
969 :
デフォルトの名無しさん:2009/11/29(日) 01:58:34
>>969 ここをこう直せばおk
($sbjが他のフィールドに出てこないことが前提ですが)
while (<$fh>){
next if !/$sbj/;
my @list = split /\s+/, substr $_, 34;
$sum += $list[0];
}
971 :
デフォルトの名無しさん:2009/11/29(日) 19:47:35
>>970 ありがとうございます。確認してみたところ、$sbj以外にも合致するフィールドが存在するみたいで、
合計値が狂ってしまうようです。
また、出力データファイル名の取引先名も規則正しく、11行目から始まるみたいなので、
next if !/$sbj/; ではなく、my @list = split /\s+/, substr $_, 34;のように文字数指定でいけないでしょうか?
再び追記なのですが、リスト参照のみの合計値の出力とは別に、
出力データファイルに存在するすべての取引先名の合計値の出力も得たいのですが、
この場合はどうすればよいのでしょうか?
お手数をおかけいたします。
特定されない程度に文字を置き換えて入力ファイルをアップしてくれた方が早く終わりそうだけどそれは無理なのかね?
分かりました。少々お待ちください。
974 :
デフォルトの名無しさん:2009/11/29(日) 21:09:20
ニコニコ静画から指定したジャンルの画像を自動で落としてくるプログラムを作りたいのですが、わかりません。
予想
API取得して
画像の番号を取り出す 正規表現?
※画像番号のあとにある"s"は取り出さない
http://lohas.nicoseiga.jp/img/ $画像番号."l"
ディレクトリに保存
差分保存する? bbsの題名ごとに??
※既に落としたものは再び見に行ったときには落とさない
繰り返し while使うのかな?
>>974 じゃあこんな感じではいかがでしょう
while (<$fh>){
/^.{10}(\w+)\s/;
my $current = $1;
next if $current !~ /$sbj/;
my @list = split /\s+/, substr $_, 34;
$sum += $list[0];
}
サンプルファイルだと、
フィールドは13文字めから始まるように見えるのですが、
だったら適当にかえてください
ファイル見た感じだと
>>955の正規表現の先頭に\s+でいけたんだけどどこで失敗したんだ?
取引先名も英語3文字だから他で一致しなそうだけど
>>975 すまんがその日本語から察するとあなたにプログラムは書けないと思う
2chのスレをHTML保存した後AAだけにしてtxtで保存するスクリプトを作りたいのですが。
また、指定したスレではなく、AAサロンとかのスレすべてから・・・という形にしたいんですが。
>980
ミスったので、訂正します。
2chのスレをAAだけにしてtxtで保存するスクリプトを作りたいのですが。
また、指定したスレではなく、AAサロンとかのスレすべてから・・・という形にしたいんですが。
>>981 で、どの部分がうまく動かないのだ?
Perlの質問だからね、ソースが無いとアドバイスできないなぁ。
そのアルゴリズムの解説には本が一冊できそうだよ。
いやぁ、質問スレじゃなかったよ。
逝ってくる。
>>982 文章かAAかの切り分けはそんなに難しくないだろう。
形態素分析にでもかければ「文章らしさ」のチェックができるから、
スコアが低いのがAA。
AAか任意の文字列かの切り分けはAIの世界の話だが。
まあ、
ノシ
OTZ
みたいな単発AAは難しいけどな。
前者、人間にだって、予備知識がなければ熨斗なのか手を振ってるのか普通にわからん。
後者、OTZはラルフ・ウィエン記念空港の空港コードだしな。
Perlでリクに答えるスクリプトを作るスレなんだし、書いてやろうぜぇ!
初心者の俺でもできるリクエストなら作ってあげるけど。。。
ニコニコ動画から作業用BGMを自動で落としてくるプログラムお願いします。
>形態素分析にでもかければ「文章らしさ」のチェックができるから、
両手をパタパタすれば空を飛べるから。