[過去ログ]
Perlについての質問箱 64箱目 (1002レス)
Perlについての質問箱 64箱目 http://mevius.5ch.net/test/read.cgi/tech/1548981877/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
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
405: デフォルトの名無しさん [sage] 2020/04/22(水) 23:57:47.29 ID:WLkEu+yG 名前を付けるような性格のものじゃなくて個数が変わる可能性があるなら 個数だけ与えてパターンを組み立てればいいよ。 $1,$2 とか書かなくても map { ${$_}} 1 .. $n で同じことができるし。 リストコンテキストで配列に入れてから splice する方がいいと思うならそうすればいい。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/405
406: デフォルトの名無しさん [sage] 2020/04/23(木) 08:13:25.78 ID:7CKy0JPC 目指すのは、個数がいくつなのか人間が把握しなくていいコード http://mevius.5ch.net/test/read.cgi/tech/1548981877/406
407: デフォルトの名無しさん [sage] 2020/04/23(木) 08:30:38.98 ID:IlZrBGCM できるでしょ。自分がスマートになってスマートなコードを書けばいい。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/407
408: デフォルトの名無しさん [sage] 2020/04/23(木) 12:10:21.89 ID:2vqGx7d4 完全に数値って決まってるんなら、俺ならsplit使っちゃうな @a = split /\d/, $str; まあこんな単純な話じゃないんだろうけど http://mevius.5ch.net/test/read.cgi/tech/1548981877/408
409: デフォルトの名無しさん [sage] 2020/05/01(金) 10:49:51.92 ID:baJ3Dlo6 activeperlで $res = `exefile $file`; みたいなことをした時に、 コマンドプロンプトからスクリプトを起動するとちゃんと動く でも、スクリプトをランチャーから起動するとno such fileになる ファイル名が英数ならどちらもok 2byte文字が混じると挙動が変わる 起動の仕方によってパスの取り扱いとか変わる? http://mevius.5ch.net/test/read.cgi/tech/1548981877/409
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 593 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.015s