[過去ログ]
Perlについての質問箱 64箱目 (1002レス)
Perlについての質問箱 64箱目 http://mevius.5ch.net/test/read.cgi/tech/1548981877/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
916: デフォルトの名無しさん [sage] 2021/01/03(日) 21:44:24.27 ID:fvS6UGyp >>914 クエリパラメータ追加するなり工夫すれ http://mevius.5ch.net/test/read.cgi/tech/1548981877/916
917: 532 [sage] 2021/01/25(月) 02:03:08.62 ID:NGykvctj ttps://perlcodesample.hateblo.jp/entry/2020/07/10/082720 http://mevius.5ch.net/test/read.cgi/tech/1548981877/917
918: デフォルトの名無しさん [sage] 2021/02/13(土) 20:39:32.56 ID:puXqs/bZ U+10000からU+1FFFFまでの文字があったら置換したい時はどう書けばいい? http://mevius.5ch.net/test/read.cgi/tech/1548981877/918
919: デフォルトの名無しさん [sage] 2021/02/13(土) 20:57:13.59 ID:aGYlIUX0 >>918 s/U¥+(1¥x{4})/pack(q{U},$1)/eg とかか? https://perldoc.jp/docs/perl/5.10.0/perluniintro.pod http://mevius.5ch.net/test/read.cgi/tech/1548981877/919
920: デフォルトの名無しさん [sage] 2021/02/13(土) 21:54:38.37 ID:puXqs/bZ あー U+10000という文字列を置換したいのではなく、それが示すサロゲートペアを置換したい http://mevius.5ch.net/test/read.cgi/tech/1548981877/920
921: デフォルトの名無しさん [sage] 2021/02/14(日) 01:36:58.65 ID:u5RUQBwf >>920 s/([¥x{10000}-¥x{1ffff}])/unpack(q{U},$1)/eg かな? ダメな気もするが。 つーか、さっきのURLにいろいろ書いてあるから、一度目を通して自分で試してみろ。 んで、うまくいったら、結果を貼るようにな。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/921
922: デフォルトの名無しさん [sage] 2021/02/14(日) 07:32:21.90 ID:kRUK3Bbl $line =~ s/\x{1f306}/置/g; これは成功する $line =~ s/\x{1....}/置/g; こんなことをやろうとしてた $line =~ s/[\x{10000}-\x{1ffff}]/置/g; これが正解だった http://mevius.5ch.net/test/read.cgi/tech/1548981877/922
923: デフォルトの名無しさん [sage] 2021/02/14(日) 10:00:12.81 ID:yrV2Bu9C Perlの場合、マルチバイト文字で正規表現を正しく使うには、あらかじめEncode::decode()でデコードしておく必要があるので厄介。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/923
924: デフォルトの名無しさん [sage] 2021/02/14(日) 11:18:28.10 ID:u5RUQBwf >>923 Perlに限らんやろ。 エンコーディングをまったく気にせず対応している処理系なんか存在しない。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/924
925: デフォルトの名無しさん [] 2021/03/03(水) 18:48:52.48 ID:Q9ky3RP3 start:aaa1 end:bbb1 value:1.23 start:aaa2 end:bbb2 value:2.34 … データとして上記のようなstart,end,value値が違うデータがだらっと繰り返ししてるファイルがあって 下記の正規表現で名前付きキャプチャを使って繰り返しマッチングし%+ハッシュを配列に格納したいのですが、こんな感じでやるとそれぞれのデータが順に入ってしまいます。 どう書けばマッチングした各ハッシュを配列に格納出来るのでしょうか? $re=qr|start:(?<start>\S+).*?end(?<end>\S+).*?value:(?<value>\S+)$|sm; my @data = m|$re|g =~ $txt; http://mevius.5ch.net/test/read.cgi/tech/1548981877/925
926: デフォルトの名無しさん [sage] 2021/03/03(水) 20:20:14.74 ID:DgitZS9x 正規表現を使うところではない気がするな。w ちょっとおちついて、行単位で処理していけよ。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/926
927: デフォルトの名無しさん [] 2021/03/03(水) 23:36:11.18 ID:Q9ky3RP3 >>926 そういうもんなんですか? pythonだとre.finditerでイタレータ毎に取れるので似たような感じにperlでもどうにか出来るんだろうと思ったのですが無理そうなら諦めます http://mevius.5ch.net/test/read.cgi/tech/1548981877/927
928: デフォルトの名無しさん [sage] 2021/03/04(木) 00:03:04.76 ID:ls8aTj6l Ruby なら、 line_num = 0 # 行番号 # 行末の改行を削除して、1行ずつ処理する results = File.foreach( "test154_data.txt", chomp: true ).with_object( [ ] ) do |line, accm| line_num += 1 # 3行毎に、ハッシュを作って、蓄積変数に追加する accm.push Hash.new if line_num % 3 == 1 ary = line.split( ':', 2 ) # 左からコロンで、2つに分割する hash = accm.last # 最後の要素 hash[ ary[ 0 ] ] = ary[ 1 ] end p results 出力 [{"start"=>"aaa1", "end"=>"bbb1", "value"=>"1.23"}, {"start"=>"aaa2", "end"=>"bbb2", "value"=>"2.34"}] http://mevius.5ch.net/test/read.cgi/tech/1548981877/928
929: デフォルトの名無しさん [sage] 2021/03/04(木) 00:11:02.54 ID:Pkas/NOZ >>927 可不可の話なら、while (m/start..end/g) {...}みたいにしたらきっとできる。 しかし、オレならやらん。 Pythonは詳しくないが、たぶんそれでもやらんやろなあ。 正規表現の使いどころとしては非効率的だし、エラー対応が非現実的だし。 また、対象はファイルの内容だそうだが、ReDoSは知ってるか? http://mevius.5ch.net/test/read.cgi/tech/1548981877/929
930: デフォルトの名無しさん [sage] 2021/03/04(木) 00:24:13.90 ID:u/riWi2o なんで急にRubyが出てくるんだよ(呆れ http://mevius.5ch.net/test/read.cgi/tech/1548981877/930
931: デフォルトの名無しさん [sage] 2021/03/04(木) 00:42:19.66 ID:2AXWpxTy perlリスペクト公言言語だから敬意を評してるんじゃないかな、大目に見てあげよう http://mevius.5ch.net/test/read.cgi/tech/1548981877/931
932: デフォルトの名無しさん [sage] 2021/03/04(木) 09:09:52.94 ID:8OZ033Zi 元がファイルだからなあ 1行ずつ分かれてるものを合体させてまた分離する、というのが無意味に見える 正規表現は柔軟性なので、使わなくていいくらいかっちりしてるものには 使わない方が安全側に倒れる 元ファイルが手書きで、無駄な改行やコメントが入ってるなら正規表現 http://mevius.5ch.net/test/read.cgi/tech/1548981877/932
933: デフォルトの名無しさん [] 2021/03/07(日) 10:07:03.25 ID:Anqe+9Rf forkがハングする。 見えてる範囲だと、memoryの使用量が関係してかもしれないです。 firefoxを使って1G程度メモリを食わせてからスクリプト走らせると、forkが返ってこなくなる。 この時のメモリ使用量は他も併せて25%程度。閉じてから再度走らせるとちゃんと動く。 エラー値返してくれたら助かるのだけど、ハングなんで困ってます。 アドバイスいただけるとたすかります。 Strawberry perl 64bit 5.32.1 Windows10Pro 64bit version 2004 Corei3-4370, Memory 12G http://mevius.5ch.net/test/read.cgi/tech/1548981877/933
934: デフォルトの名無しさん [sage] 2021/03/07(日) 10:45:56.10 ID:Q92Mc+WL 安定して動かないならバグっている だいたい動くけど、ごく稀に動作がおかしい、ということがforkはある forkがコケても動くような仕組みにすればok http://mevius.5ch.net/test/read.cgi/tech/1548981877/934
935: デフォルトの名無しさん [sage] 2021/03/07(日) 10:50:58.30 ID:x9JK9zFw そもそもWindows APIはfork()をサポートしてない。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/935
936: デフォルトの名無しさん [sage] 2021/03/07(日) 11:48:43.53 ID:Anqe+9Rf >>934 ありがとう。 メモリ使用量が低いと成功。 firefoxでもタブ1枚ぐらいなら成功。 firefoxでタブ(yahoo.com)10枚開くと、確実にハング。 ラクダ本にも、失敗(戻り値undef)の対処法が書いてありますね。 WindowsOSがらみなので、イロイロありそうなのは察します。 でも、forkを呼び出したらハングして帰ってこないからなぁ。 コケるというよりは、forkを呼び出さない: if( $can_fork ) {fork;} ってな書き方が必要になってしまう。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/936
937: デフォルトの名無しさん [sage] 2021/03/07(日) 11:53:44.14 ID:Anqe+9Rf 追記: perlスクリプトとfirefoxは関係ありません。 単に、デスクトップで調べものしながら、コマンドプロンプトでperlインタプリタ を起動して作業しているだけです。連投失礼しました。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/937
938: デフォルトの名無しさん [] 2021/03/07(日) 12:10:59.62 ID:3xq9+JKJ ActivePerl の Windows 版では fork() がエミュレーションされているらしい。 実際に呼び出してみるとスレッドがひとつ増える。 中ではおおかた CreateThread() でもしてるんだろう。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/938
939: デフォルトの名無しさん [sage] 2021/03/07(日) 12:24:40.47 ID:xy+MS7Fg windowsで安定動作させたいならforkを使わずに自分で別スレッドか別プロセス立てるのが吉 http://mevius.5ch.net/test/read.cgi/tech/1548981877/939
940: デフォルトの名無しさん [sage] 2021/03/07(日) 14:22:59.45 ID:Anqe+9Rf >>938 perldocによると、ActiveStateとMSが頑張ったらしいよ。 エミュあつかいとのことです。 >>939 ありがとう。 スレッドでするわ・・・さすがにハングはだめだわ(^^; http://mevius.5ch.net/test/read.cgi/tech/1548981877/940
941: デフォルトの名無しさん [sage] 2021/03/07(日) 14:48:48.37 ID:Q92Mc+WL forkとか再帰呼び出しとか、魔術的で楽しいけど、大抵罠にはまる http://mevius.5ch.net/test/read.cgi/tech/1548981877/941
942: デフォルトの名無しさん [sage] 2021/03/07(日) 17:38:53.17 ID:quYd9iFF 再帰はええやろ。 forkはもともとUNIX用で、Windowsとは相性が激悪なだけやから、しゃあない。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/942
943: デフォルトの名無しさん [sage] 2021/03/07(日) 17:49:12.06 ID:Q92Mc+WL 階層ディレクトリを辿る、みたいなとこに再帰を使うと止まらなくなったりする 絶対止まると保証されてるとこにしか使えなくて、そういうのは別に再帰でなくてもやれる 隅々までどうなってるか判らないものに再帰は威力を発揮するけど、 そういうのは往々にして停止性が保証されない http://mevius.5ch.net/test/read.cgi/tech/1548981877/943
944: デフォルトの名無しさん [sage] 2021/03/07(日) 18:11:41.00 ID:eIiM+J9a それはあんたが無能だから http://mevius.5ch.net/test/read.cgi/tech/1548981877/944
945: デフォルトの名無しさん [sage] 2021/03/07(日) 18:18:17.98 ID:x9JK9zFw Perlと関係ない話はよそでどうぞ http://mevius.5ch.net/test/read.cgi/tech/1548981877/945
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 57 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.018s