[過去ログ]
Perlについての質問箱 64箱目 (1002レス)
Perlについての質問箱 64箱目 http://mevius.5ch.net/test/read.cgi/tech/1548981877/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
817: デフォルトの名無しさん [sage] 2020/12/06(日) 01:06:31.00 ID:GZ1arJtc >>814 仕様どおり。w 記述したとおりに正しく動作しているな。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/817
818: デフォルトの名無しさん [sage] 2020/12/06(日) 01:19:08.97 ID:d/9HsImJ >>802 今更だけど日付をエポック秒で表して日数×24*60*60を足すんじゃだめ? 車輪の再発明というかただの製作を承知で、自分で日付変換の関数を一通り作ったらそれで十分だった 便利そうなライブラリを探そうとしたこともあるけど、オブジェクト指向的なやつだと結局その オブジェクトを介した変換が頻出することになってスラスラ書けないなあと思ったのです。 もし今後UTCとかJSTとか出てきたときはそのときまた考える。 http://mevius.5ch.net/test/read.cgi
/tech/1548981877/818
819: デフォルトの名無しさん [sage] 2020/12/06(日) 02:06:04.21 ID:fHRDTQ7E PerlのYAML関連のモジュールが全部重くて厳しい 高速なYAMLモジュールはないのか? http://mevius.5ch.net/test/read.cgi/tech/1548981877/819
820: デフォルトの名無しさん [sage] 2020/12/06(日) 10:37:45.21 ID:kLx/M/5Z まずは高速なCのライブラリを見つけます http://mevius.5ch.net/test/read.cgi/tech/1548981877/820
821: デフォルトの名無しさん [sage] 2020/12/06(日) 11:42:16.72 ID:BlX3SIQO >>803 だが、>>802 の質問は>>803 で終わったと思ったのだが、不親切だった? 例えば2019年12月1日から365日後の日付は、次のようにすれば得られる。 use Time::Local; $year=2019;$mon=12;$mday=1;$hours=12;$min=0;$sec=0; $intvl=365; $basetime = timelocal($sec, $min, $hours, $mday, $mon-1, $year-1900); $basetime += $intvl*24*60*60; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =localtime($basetime); $mon+=1;$year+=19
00; print STDERR "$year.$mon.$mday\n"; http://mevius.5ch.net/test/read.cgi/tech/1548981877/821
822: デフォルトの名無しさん (ワッチョイ be3b-cfMa) [sage] 2020/12/06(日) 11:58:40.89 ID:5Rf1GOX10 見るからに面倒臭い http://mevius.5ch.net/test/read.cgi/tech/1548981877/822
823: デフォルトの名無しさん [sage] 2020/12/07(月) 09:18:58.50 ID:zfvnE2zk $basetime = timelocal_nocheck($sec, $min, $hours, $mday+$intvl, $mon-1, $year-1900); http://mevius.5ch.net/test/read.cgi/tech/1548981877/823
824: デフォルトの名無しさん [sage] 2020/12/07(月) 09:43:24.77 ID:UAiCPmDo Time::Piece はよくできてて、何かのログとかに現在時刻を書き出す、 とかの用途には十分に使える でも、時刻計算や日数計算はあまり考慮されていない 現在時刻からの計算はできても、任意の時刻からだと弱い http://mevius.5ch.net/test/read.cgi/tech/1548981877/824
825: デフォルトの名無しさん [sage] 2020/12/07(月) 14:03:32.45 ID:tC78i6pr >>807 use Time::Piece; use Time::Seconds; my $day = Time::Piece->strptime('2020-12-05', '%Y-%m-%d'); $day += ONE_DAY * 100; print $day->date, "\n"; print $day->year, "\n"; print $day->mon, "\n"; print $day->mday, "\n"; http://mevius.5ch.net/test/read.cgi/tech/1548981877/825
826: デフォルトの名無しさん [sage] 2020/12/07(月) 14:21:35.27 ID:UAiCPmDo まあ、strptime さえ目を瞑れば こんなもん、何か見ないと書けない http://mevius.5ch.net/test/read.cgi/tech/1548981877/826
827: デフォルトの名無しさん [] 2020/12/07(月) 15:40:13.93 ID:15jj6qfl use POSIX; を宣言してCの標準関数に似た時刻処理機能を使うのが普通じゃないの? Cの時刻処理サンプルコードを円滑にPerlに移植できるよ。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/827
828: デフォルトの名無しさん [sage] 2020/12/07(月) 17:17:12.82 ID:VC6/tHTg >>826 DateTimeモジュール使えば全て解決なんだが クソデカくて重いという弱点が http://mevius.5ch.net/test/read.cgi/tech/1548981877/828
829: 532 [sage] 2020/12/07(月) 21:57:48.14 ID:WG5ppFXF Time::Pieceの弱点は strptime()で作ったインスタンスのtimeゾーンをいじれないとこかな? 後1つなんか弱手あった気がするが忘れた http://mevius.5ch.net/test/read.cgi/tech/1548981877/829
830: デフォルトの名無しさん [sage] 2020/12/07(月) 22:38:30.88 ID:UAiCPmDo strptimeはpythonでもrubyでも同じだから、もう慣れなんだろうな 'YYYY-MM-DD' とかではあかんかったのか http://mevius.5ch.net/test/read.cgi/tech/1548981877/830
831: デフォルトの名無しさん [] 2020/12/08(火) 04:35:26.34 ID:65P2yCaW >>821 timeLocal()の年は1900引かない方がいいよ。これちょっとCのライブラリとは違うんだよ。詳しくはドキュメント読んで。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/831
832: デフォルトの名無しさん [] 2020/12/08(火) 04:36:34.48 ID:65P2yCaW あ。タイプミス。timelocal()ね。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/832
833: デフォルトの名無しさん [sage] 2020/12/08(火) 23:53:37.62 ID:VS4VHEi1 すみません、ソートで教えて欲しいんですが下記のようにみたいな枝番号が付いてる文字列をハッシュのキーとして ハイフン前の数値でソートした後にハイフン後の数値でソートしたいのですが 普通に$a <=> $bだとハイフンの後の値がバラバラになって上手くいきません キーを作る際に別々に作ってループ増やすくらいしか自分には解決方法が無いのですが、スマートに出来る方法は無いのでしょうか? 1-1 1-2 2-1 2-2 3-1 http://mevius.5ch.net/test/read.cgi/tech/15
48981877/833
834: デフォルトの名無しさん [sage] 2020/12/09(水) 00:31:36.73 ID:LWKBPFtb >>833 シュワルツ変換で検索! たとえば : mapでソート用の値として、前の数字×10000+後ろの数字の値をつくって、それともとの値のペアにする。 それを<=>でソートする。 mapで、ソート結果からもとのデータ部分を取り出す。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/834
835: デフォルトの名無しさん [sage] 2020/12/09(水) 00:39:46.90 ID:LWKBPFtb 要は、map{...} sort{...} map{...}となる。 変換のためのループが2回入る(map)が、記述としてはあっさりなので、特殊なソートをしたいときにはよく使われる有名な方法。 伝わるかな?w http://mevius.5ch.net/test/read.cgi/tech/1548981877/835
836: デフォルトの名無しさん [sage] 2020/12/09(水) 08:45:38.11 ID:UMU4oc+t それで書けるなら、sort { } でも書けるよね http://mevius.5ch.net/test/read.cgi/tech/1548981877/836
837: デフォルトの名無しさん [sage] 2020/12/09(水) 09:35:02.27 ID:sn/SI4a+ >>833 こんな感じかな。デバッグはしていないが。 @newlist = sort compare @oldlist; sub compare{ my ($ap, $bp) = @_; ($ap1, $ap2) = $ap=~/([0-9]+)\-([0-9]+)/; ($bp1, $bp2) = $bp=~/([0-9]+)\-([0-9]+)/; return 1 if $ap1 > $bp1 return -1 if $ap1 < $bp1 # $ap1 == $bp1; return 1 if $ap2 > $bp2; return -1; } http://mevius.5ch.net/test/read.cgi/tech/1548981877/837
838: デフォルトの名無しさん [sage] 2020/12/09(水) 10:27:05.71 ID:LWKBPFtb >>836,>>837 それだと、要素の比較のたびに、値の変換処理が行われる。 比較は何度も行われるため、変換処理が軽くない場合、ソート全体としてかなり重くなりうる。 すくなくとも「スマート」とは言えない。 そこで、変換結果をキャッシュするような形になるのがシュワルツ変換。 知らんならググれ。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/838
839: デフォルトの名無しさん [sage] 2020/12/09(水) 10:46:35.52 ID:zREBomTd sort { s1($a) <=> s1($b) } keys %x; sub s1 { shift =~ /(¥d+)-(¥d+)/ && 100*$1+$2 } sortならこんなかんじ http://mevius.5ch.net/test/read.cgi/tech/1548981877/839
840: デフォルトの名無しさん [sage] 2020/12/09(水) 10:47:56.70 ID:UMU4oc+t 順番が変わるだけで処理量は変わらんでしょう どっちにしろ重い 次にソートする時はソート対象が変わっているんだから、キャッシュできない 有効な局面もあるんだろうけど、今回に関してはトリッキーなだけでメリットがない http://mevius.5ch.net/test/read.cgi/tech/1548981877/840
841: デフォルトの名無しさん [sage] 2020/12/09(水) 10:51:05.82 ID:UMU4oc+t 次のソートじゃなくて、1回のソート内部の複数の比較に対してか あー、確かに速くなりそうな気がする 処理系が気を利かせて変わらない気もする http://mevius.5ch.net/test/read.cgi/tech/1548981877/841
842: デフォルトの名無しさん [sage] 2020/12/09(水) 11:29:48.25 ID:LWKBPFtb >>841 ソートの内部処理が想像できんのか? もとの並び方にはよるが、ふつうは大きく異なる。 「処理系」とやらが気を利かせられる範疇ではない。 比較処理にsayでもいれて試してみろっつーんだよ。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/842
843: デフォルトの名無しさん [sage] 2020/12/09(水) 12:58:19.84 ID:UMU4oc+t 内部の話だからsayでは判らんだろ 関数で評価しないといけないと判っていて、動的に処理する必要も無いんだから、 評価済みのテーブルを内部に持たせようというのは自然な発想 http://mevius.5ch.net/test/read.cgi/tech/1548981877/843
844: デフォルトの名無しさん [sage] 2020/12/09(水) 13:12:15.55 ID:/81rDyGm >>843 試してから言え。 きっと、想像以上の出力が出てきて驚くから。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/844
845: デフォルトの名無しさん [sage] 2020/12/09(水) 13:44:43.94 ID:UMU4oc+t 判ってないのかな 処理速度に配慮した処理系があっても不思議ではないという話 手元で試して遅かったとしても、全ての処理系に対する証明にはならない http://mevius.5ch.net/test/read.cgi/tech/1548981877/845
846: デフォルトの名無しさん [sage] 2020/12/09(水) 14:16:41.19 ID:AA5LXV3h >>845 痛々しいからもうやめとけ http://mevius.5ch.net/test/read.cgi/tech/1548981877/846
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 156 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.013s