[過去ログ]
Perlについての質問箱 64箱目 (1002レス)
Perlについての質問箱 64箱目 http://mevius.5ch.net/test/read.cgi/tech/1548981877/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
375: デフォルトの名無しさん [sage] 2020/03/18(水) 19:35:06.32 ID:iQ6PHWNN Windows7とか? http://mevius.5ch.net/test/read.cgi/tech/1548981877/375
376: デフォルトの名無しさん [sage] 2020/03/28(土) 10:30:07.37 ID:gZJzrXqn 検索が遅い いろんな条件に対してファイル全体を検索、ということをする時に、 OSのキャッシュに頼って毎回 `grep` する方が速い メモリに読み込んで検索すると負ける ループで$data[$i] =~ /$pattern/ した方がまだ速くて、 grep {/$pattern/} @data するともっと遅くなる 大量一括検索の高速化のテクニックみたいなの何かあるのかな http://mevius.5ch.net/test/read.cgi/tech/1548981877/376
377: デフォルトの名無しさん [sage] 2020/03/28(土) 18:48:22.67 ID:Cuxaq7bT >>376 https://metacpan.org/search?q=grep 使った事ないが MCE::Grep 辺りは説明読む限り速そう http://mevius.5ch.net/test/read.cgi/tech/1548981877/377
378: デフォルトの名無しさん [sage] 2020/03/28(土) 18:55:38.49 ID:Cuxaq7bT もっと基本的な話なら perlperf https://perldoc.jp/docs/perl/perlperf.pod http://mevius.5ch.net/test/read.cgi/tech/1548981877/378
379: デフォルトの名無しさん [sage] 2020/03/28(土) 19:23:29.33 ID:gZJzrXqn MCE::GrepはCPUの使用率は上がるけど遅くなった grepよりは正規表現の処理のあたりが時間かかってるんだと思う 感覚的にはもっと高速でも全然おかしくない感じなのに http://mevius.5ch.net/test/read.cgi/tech/1548981877/379
380: デフォルトの名無しさん [sage] 2020/03/28(土) 19:34:33.22 ID:gZJzrXqn 100MBのファイルからパターンに合う行を全部抽出するのに1秒かかるくらいの感じ で、パターンが250もあるから、コーヒーが飲めるくらい待たされる http://mevius.5ch.net/test/read.cgi/tech/1548981877/380
381: デフォルトの名無しさん [sage] 2020/03/28(土) 20:00:38.86 ID:L8+cmwNy 俺だったらgrepでやっちゃうなぁ 結果はファイル経由で http://mevius.5ch.net/test/read.cgi/tech/1548981877/381
382: デフォルトの名無しさん [sage] 2020/03/28(土) 21:36:49.99 ID:L89shHGR >>376 qr//で事前に正規表現をコンパイルしてみたら? http://mevius.5ch.net/test/read.cgi/tech/1548981877/382
383: デフォルトの名無しさん [sage] 2020/03/28(土) 21:55:00.53 ID:gZJzrXqn 同じパターンで繰り返し検索するのではなくて、 いろんなパターンで同じ対象を検索するので、コンパイルはできない でも、パターンのリストは実行前に確定しているので、 qrで作ったものを配列に持たせておけば速くなるだろうか http://mevius.5ch.net/test/read.cgi/tech/1548981877/383
384: デフォルトの名無しさん [sage] 2020/03/28(土) 23:16:33.34 ID:2U8ZKDy+ もはや perl の能力を超えているな C とかで書いた方がいい http://mevius.5ch.net/test/read.cgi/tech/1548981877/384
385: デフォルトの名無しさん [sage] 2020/03/28(土) 23:24:04.96 ID:ZQFwrOhU パターンの内容にもよるが、flex で書いて Inline::C で呼ぶという方法もある。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/385
386: デフォルトの名無しさん [] 2020/03/28(土) 23:25:40.33 ID:7nefda3x 色んなパターンで? grep -f でパターン読ませてやるのと同じか? http://mevius.5ch.net/test/read.cgi/tech/1548981877/386
387: デフォルトの名無しさん [sage] 2020/03/29(日) 09:15:52.43 ID:9AyQFVoq 素の Perl は NFA だけだから、どうしても速度的には不利になる。 パターンが250もあるなら尚更だ。 grep との差はPerl と C の差はもちろんあるだろうが DFA でできるパターンなら、その差が大きいと思う。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/387
388: デフォルトの名無しさん [sage] 2020/03/29(日) 09:42:19.51 ID:aacnUCYv linuxだったら素直にgrep呼べばいいだけだけど、 windowsだと素性が良くて高速なgrepを探すところでまず困難がある さらに、grepに引数を渡すところにもエスケープ文字の困難があって、 結果の受け取りにも文字コードの困難が http://mevius.5ch.net/test/read.cgi/tech/1548981877/388
389: デフォルトの名無しさん [sage] 2020/03/29(日) 17:43:38.29 ID:9AyQFVoq そういえば awk は DFA じゃなかったかな。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/389
390: デフォルトの名無しさん [sage] 2020/03/30(月) 00:14:28.89 ID:mvvN5DTM perl の Memoize は関数全体に掛けるようですが、 ruby の @memo、javascript の memo の変数に掛けるのは新し目の使い方でしょうか http://mevius.5ch.net/test/read.cgi/tech/1548981877/390
391: デフォルトの名無しさん [] 2020/03/30(月) 04:32:31.95 ID:PdZ6Klrm >>388 WSLのUbuntuだとどうなのだろうか? あれ遅い? http://mevius.5ch.net/test/read.cgi/tech/1548981877/391
392: デフォルトの名無しさん [sage] 2020/03/30(月) 08:35:14.72 ID:3FWyQXw7 NFA でなければならない理由がないなら DFA にするだけで速度 1000 倍は堅いかも。 でも Perl のままでも正規表現のチューニングは可能だ。まだやってないならね。 実際に使ってるパターンを見せてもらわないことにはなんとも言えないが。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/392
393: デフォルトの名無しさん [sage] 2020/03/31(火) 12:53:45.32 ID:GaEXrIp5 >>388 普通にWSLを使えばいいだけでは? http://mevius.5ch.net/test/read.cgi/tech/1548981877/393
394: デフォルトの名無しさん [sage] 2020/03/31(火) 22:24:02.97 ID:Z+pFaYZ2 win8.1のサポートが終わった頃に思い出したら使ってみよう http://mevius.5ch.net/test/read.cgi/tech/1548981877/394
395: デフォルトの名無しさん [sage] 2020/04/22(水) 13:25:13.88 ID:gkB+0fgm @array = ($str =~ /(PAT1).+?(PAT2).+?(PAT3)/g); みたいにすると、パターン3つ分が配列に入るけど、他にもマッチするとそれも続けて入る できれば2次元配列になって欲しい そんな技はある? http://mevius.5ch.net/test/read.cgi/tech/1548981877/395
396: デフォルトの名無しさん [sage] 2020/04/22(水) 18:47:25.28 ID:WLkEu+yG そういうことをする時のセオリーはスカラコンテキストで $str =~ /\G$pat/g http://mevius.5ch.net/test/read.cgi/tech/1548981877/396
397: デフォルトの名無しさん [sage] 2020/04/22(水) 19:29:55.51 ID:gkB+0fgm 可能? $str = '1a2b3c1x1d2e3f1g2h3i'; を与えられて [[a, b, c], [d, e, f], [g, h, i]] を得るにはどうすれば http://mevius.5ch.net/test/read.cgi/tech/1548981877/397
398: デフォルトの名無しさん [sage] 2020/04/22(水) 20:38:21.44 ID:f6F85tCk my @arr = (); while ($str =~ /\G.+?([a-z]).+?([a-z]).+?([a-z])/g) { push @arr, [$1, $2, $3]; } http://mevius.5ch.net/test/read.cgi/tech/1548981877/398
399: デフォルトの名無しさん [sage] 2020/04/22(水) 20:54:42.93 ID:gkB+0fgm [[a, b, c], [x, d, e], [f, g, h]] になっとるよ http://mevius.5ch.net/test/read.cgi/tech/1548981877/399
400: デフォルトの名無しさん [sage] 2020/04/22(水) 20:56:31.77 ID:gkB+0fgm でも判った 普通に$1使えばいいだけか 結果を一つずつスカラに取るんだと思ってた http://mevius.5ch.net/test/read.cgi/tech/1548981877/400
401: デフォルトの名無しさん [sage] 2020/04/22(水) 21:01:22.02 ID:gkB+0fgm /\G.*?1(.)2(.)3(.)/g これがやりたかったこと http://mevius.5ch.net/test/read.cgi/tech/1548981877/401
402: デフォルトの名無しさん [sage] 2020/04/22(水) 21:27:03.82 ID:gkB+0fgm 結局コードはあんまり変わらなくて、ループで push @array, ($1, $2, $3) にするか、後で splice(@elements, 0, 3) を使っていくかの違い パターンを3つから4つに増やした時に、 $4を追加するか、3を4に増やすかのメンテはやっぱり必要 いきなり2次元配列が得られるスマートさからは劣る http://mevius.5ch.net/test/read.cgi/tech/1548981877/402
403: デフォルトの名無しさん [sage] 2020/04/22(水) 21:30:34.59 ID:WLkEu+yG どうやら今回は必要ないみたいだけど事前にグループの個数が 判らないという前提なら @- とか見ればいい。 あるいはグループに名前を付けて %+ を使えばいい。 全部ここに書いてあるよ。 https://perldoc.jp/pod/perlretut http://mevius.5ch.net/test/read.cgi/tech/1548981877/403
404: デフォルトの名無しさん [sage] 2020/04/22(水) 21:32:10.06 ID:f6F85tCk Perlで、とある配列を指定した要素数ごとに別の配列リファレンスに分割する処理をList::MoreUtilsモジュールで書き直してみた https://perl48.hatenablog.com/entry/2018/08/19/005304 http://mevius.5ch.net/test/read.cgi/tech/1548981877/404
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 598 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.011s