[過去ログ]
Perlについての質問箱 64箱目 (1002レス)
Perlについての質問箱 64箱目 http://mevius.5ch.net/test/read.cgi/tech/1548981877/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
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
946: デフォルトの名無しさん [sage] 2021/03/07(日) 23:39:46.89 ID:quYd9iFF >>943 再帰終了をちゃんとできないヤツは、ループ終了もできないやろ。w ディレクトリうんぬんに限って言えば、ファイルシステムへの知識が足りないとかか。 リンク系の。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/946
947: デフォルトの名無しさん [sage] 2021/03/07(日) 23:53:02.15 ID:Q92Mc+WL 軽く考えてるけど、プログラムの停止性ってもっそい奥が深い ゲーデルの不完全性定理と密接に絡んでる http://mevius.5ch.net/test/read.cgi/tech/1548981877/947
948: デフォルトの名無しさん [sage] 2021/03/08(月) 00:03:00.68 ID:RDgJTpCR tarのhオプションってよくできているよな 無限ループに陥りやすいが http://mevius.5ch.net/test/read.cgi/tech/1548981877/948
949: デフォルトの名無しさん [sage] 2021/03/08(月) 00:23:56.56 ID:tQicr2bh 再帰処理は考えてるの楽しいよな 実装するかとなると状況次第 http://mevius.5ch.net/test/read.cgi/tech/1548981877/949
950: デフォルトの名無しさん [sage] 2021/03/08(月) 01:47:35.66 ID:6lKYXbK2 >>947 バグが存在しない証明は超難しいから、ふつうやらない。 かわりに、テストを必要なだけする。 それだけのこと。 原理とやらは学者に任せておけばいい。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/950
951: デフォルトの名無しさん [sage] 2021/03/08(月) 10:04:20.07 ID:XzCJxGl3 ggl先生に "perl dir tree" で検索かけたら自作ページが多いね。 安心安全鉄板ライブラリとかってあるかな? 素人考えでなんだけど・・・OS別、FS別なんてあるんかの。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/951
952: デフォルトの名無しさん [sage] 2021/03/08(月) 10:17:22.69 ID:SORPad+v 親にリンクしていてループするのが困るので、 全部の子に対してカウンタを持たせる、くらいしか回避方法が無いんだよな それだと再帰でやってるうまみが無くなってしまう http://mevius.5ch.net/test/read.cgi/tech/1548981877/952
953: デフォルトの名無しさん [sage] 2021/03/08(月) 12:03:45.46 ID:JySUELLY 素直にFile::Find使っとけ http://mevius.5ch.net/test/read.cgi/tech/1548981877/953
954: デフォルトの名無しさん [sage] 2021/03/08(月) 12:34:19.76 ID:SORPad+v dir /s の結果を使うのが一番楽 http://mevius.5ch.net/test/read.cgi/tech/1548981877/954
955: デフォルトの名無しさん [sage] 2021/03/08(月) 16:27:27.25 ID:3P7OMB5d File::Findは処理速度が遅いのが難 http://mevius.5ch.net/test/read.cgi/tech/1548981877/955
956: デフォルトの名無しさん [sage] 2021/03/08(月) 17:21:12.95 ID:6lKYXbK2 >>952 リンクを不用意にたどるな。 既存コマンドでもオプションにしがちだし、ディレクトリ構成によっては死ぬくらいだから、しゃあない。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/956
957: デフォルトの名無しさん [sage] 2021/03/08(月) 17:24:47.95 ID:6lKYXbK2 >>955 何と比べて? no_chdirを指定したりしたらマシになったりしない? http://mevius.5ch.net/test/read.cgi/tech/1548981877/957
958: デフォルトの名無しさん [sage] 2021/03/08(月) 17:40:53.14 ID:SORPad+v ディレクトリならどこかにある実体のコピーだろうから、リンクなんか無しで済むけど、 より一般化したリスト構造だったら辿らない訳にいかない だから、事前にループしていないことを確認してから処理することになって、 そのテストがループにはまる http://mevius.5ch.net/test/read.cgi/tech/1548981877/958
959: デフォルトの名無しさん [] 2021/03/08(月) 20:06:16.14 ID:3P7OMB5d >>957 試してみたが、no_chdirは関係ない。 File::Findは、dir /S /B コマンドのパイプ読み取りに比べて、3倍も時間がかかる。 File::Findは遅いだけでなくコールバックでユーザー変数を扱えない欠点があるから、私はFile::Findを使わない。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/959
960: デフォルトの名無しさん [] 2021/03/08(月) 21:30:38.88 ID:3P7OMB5d File::FindはUnix系OSで使う場合は find コマンドのパイプ読み取りと同等か少し速い。 File::Findが明確に遅いのはWindows向けにビルドされたPerlの場合のみ。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/960
961: デフォルトの名無しさん [sage] 2021/03/08(月) 22:05:40.64 ID:6lKYXbK2 >>960 WindowsのどのPerl? ひょっとしてCygwin版? ActivePerlやMSYS2版ならマシだったり? http://mevius.5ch.net/test/read.cgi/tech/1548981877/961
962: デフォルトの名無しさん [] 2021/03/08(月) 22:39:10.09 ID:3P7OMB5d >>961 残念ながらネイティブに最適化されているはずのActivePerl や Strawberry Perl でFile::Findが遅い。 原因は知らないけどWin32APIの使い方が良くないからだと思う。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/962
963: 532 [sage] 2021/03/09(火) 00:11:34.07 ID:jxvXMO9/ $^WIN32_SLOPPY_STAT じゃね? File::FindはWindowsだと、SJISで全角「構」などの2バイト目が\(0x5c)のフォルダに遭遇すると 無限loopしたり誤動作するから、結局Wndowsでフォルダ階層を再帰的にたどるには utf8化したperl sourceで自分でopendir, readdirして、encode, decodeせにゃならん。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/963
964: 532 [sage] 2021/03/09(火) 00:15:08.81 ID:jxvXMO9/ 別件だがWindowsではSJISで全角「構」などの2バイト目が\(0x5c)のフォルダには perlからlstatやutimeが出来ないみたいで難儀した。 Linuxのutf8のファイルシステムと違ってWindowsのSJISファイルシステムは面倒 http://mevius.5ch.net/test/read.cgi/tech/1548981877/964
965: デフォルトの名無しさん [sage] 2021/03/09(火) 01:17:12.50 ID:B0uPByTP >>962 そうやったか。。。 >>964 NTFSファイルシステム自体はUTF-16やぞ? MicrosoftがようやくいよいよコマンドプロンプトとかNotepadとかのUnicode対応を考えはじめてるし、いずれWindows版も対応するんちゃうか。 いっそツッコんだら? http://mevius.5ch.net/test/read.cgi/tech/1548981877/965
966: 928 [sage] 2021/03/09(火) 05:19:08.22 ID:NUN2sKP0 >>925 Ruby で、元のファイルを、CSV へ変換してみた。 データ中に、ダブルクォーテーション・カンマを入れても、正常に動く require 'csv' line_number = 0 # 行番号 # 行末の改行を削除して、1行ずつ処理する。蓄積変数は2次元配列 results = File.foreach( "input.txt", chomp: true ).with_object( [ ] ) do |line, accm| line_number += 1 accm.push [ ] if line_number % 3 == 1 # 3行毎に、空配列を追加する ary = line.split( ':', 2 ) # 左からコロンで、2つに分割する last = accm.last # 最後の要素 (配列) last.push( ary[ 1 ] ) # コロンの右側を、配列に追加する end results.unshift %w(start end value) # 先頭に、ヘッダー行を追加する # p results csv_str = results.map( &:to_csv ).join # 2次元配列を、CSV 文字列に変換する print csv_str 出力 start,end,value a_1,"b""1",1 "a,2",b_2,2.34 http://mevius.5ch.net/test/read.cgi/tech/1548981877/966
967: デフォルトの名無しさん [] 2021/03/09(火) 08:00:45.91 ID:4CK4kuWA コマンドプロントはとっくにUTF-16対応している。出力フォントが表示に対応していないだけ。 コマンドプロントにはもう機能追加されないから Windows Terminalに乗り換えたほうがいい。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/967
968: デフォルトの名無しさん [] 2021/03/09(火) 08:27:17.16 ID:4CK4kuWA コマンドプロントは今でもすでに非システムコード文字(アラビア文字やハングルなど)をコマンドに引数渡しできる。 受け取る側のアプリがUTF-16形式で起動時の引数を取らなかったり、batファイルが非システムコード文字に対応していないだけ。 コマンドプロントの努力だけではどうしようもない。 なお、Windows向けビルドされたJavaやPerlは非システムコード文字を引数で受け取れない制約がある。 プログラム側で自力でbase64エンコード対応するなどして回避するしかない。 一方、Windows向けビルドされたPythonは非システムコード文字を引数で受け取ることができる。 Pythonのプラグインを作ったことある人なら分かると思うが、Pythonはインターフェース間の文字列のやりとりにUTF-16を使っている。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/968
969: デフォルトの名無しさん [sage] 2021/03/09(火) 08:33:53.42 ID:HJK4uNxM UTF-16も嬉しくない http://mevius.5ch.net/test/read.cgi/tech/1548981877/969
970: 532 [sage] 2021/03/09(火) 08:45:38.83 ID:UTQZC5u1 NTFSってUTF-16だったのか、 しかしperlのreaddirはcp932で返してきているような気がs… http://mevius.5ch.net/test/read.cgi/tech/1548981877/970
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 32 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.015s