[過去ログ]
Perlについての質問箱 64箱目 (1002レス)
Perlについての質問箱 64箱目 http://mevius.5ch.net/test/read.cgi/tech/1548981877/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
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
971: デフォルトの名無しさん [sage] 2021/03/09(火) 09:28:02.71 ID:HJK4uNxM NTFSはUCS-2で、windowsがUTF-16 それをわざわざcp932に変換して寄越す http://mevius.5ch.net/test/read.cgi/tech/1548981877/971
972: デフォルトの名無しさん [sage] 2021/03/09(火) 10:42:13.66 ID:4CK4kuWA NTFSもUTF-16だと思うよ。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/972
973: デフォルトの名無しさん [sage] 2021/03/09(火) 10:44:51.95 ID:SbXzcieK >>968 > コマンドプロントの努力だけではどうしようもない。 そらそうや。 ついにcp932から離れようとする世の方向性を受けて、Perlも変わるんじゃねえの、という話。 Perl7とかでそういう話は出てないんかな? 知らんけど。 > なお、Windows向けビルドされたJavaやPerlは非システムコード文字を引数で受け取れない制約がある。 制約つーか、むしろ互換維持とかただ昔のままほったらかしとかやろ。w http://mevius.5ch.net/test/read.cgi/tech/1548981877/973
974: デフォルトの名無しさん [sage] 2021/03/09(火) 10:56:11.55 ID:SbXzcieK >>971 そのおかげで、20年以上昔からふつうにWindowsで使えてきたわけだからしゃあない。 むしろありがたかった話。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/974
975: デフォルトの名無しさん [sage] 2021/03/09(火) 12:55:12.46 ID:NUN2sKP0 Windows 10 Home でも、Docker が出来るようになった。 ただし、Windowsの連続更新に、3時間も掛かったけど WSL2, Ubuntu でも使えば? 漏れは、Ruby on Rails をやってる Linux側には、日本人が作った、バージョンマネージャーのanyenv で、 rbenv, nodenv を使って、ruby 2.6.6, node 12.16.2 も入れた Dockerでも良いし。 ただし、メモリ8GB じゃキツイ。16GB は欲しい http://mevius.5ch.net/test/read.cgi/tech/1548981877/975
976: デフォルトの名無しさん [] 2021/03/09(火) 20:18:30.71 ID:BijZjsz/ 正規表現のパターンの中に変数を書くとおかしくなりますが、どうしたらいいでしょうか。 やりたいこと:「hoge」の後ろがカンマか行末の場合を抽出したい $pat = "hoge[,\$\]"; if( $str =~ m/$pat/ ){...} こう書くと $pat が「hoge[,$]」になることはデバッガで確認できたのですが、思った通りのマッチになりません。マッチングの部分に $pat ではなく定数で「hoge[,$]」と書けばマッチングします。 どう書いたらいいでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1548981877/976
977: デフォルトの名無しさん [sage] 2021/03/09(火) 20:28:25.57 ID:HJK4uNxM なんで ] だけエスケープしてるの? http://mevius.5ch.net/test/read.cgi/tech/1548981877/977
978: デフォルトの名無しさん [sage] 2021/03/09(火) 20:34:49.51 ID:nUvu3sQ4 そういうときの為のqrですよ http://mevius.5ch.net/test/read.cgi/tech/1548981877/978
979: デフォルトの名無しさん [sage] 2021/03/09(火) 20:36:21.19 ID:XI91xcQL []内は文字セットだからその$は行末マッチじゃないし http://mevius.5ch.net/test/read.cgi/tech/1548981877/979
980: 976 [] 2021/03/09(火) 22:41:12.95 ID:BijZjsz/ 色々やって混乱して間違った事を書いていました。 やりたいことは >>976 の通り。 >>979を見てそれならばと「$pat = "hoge,{0,1}\$"」と書いたら目的を達成できました。 お騒がせしました。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/980
981: デフォルトの名無しさん [sage] 2021/03/09(火) 22:43:46.86 ID:HJK4uNxM {0,1}って?と等価だよね http://mevius.5ch.net/test/read.cgi/tech/1548981877/981
982: デフォルトの名無しさん [sage] 2021/03/09(火) 23:03:58.63 ID:B0uPByTP >>980 hoge,xxxx にはマッチしないが、ええんか? >>976の目的と違うで。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/982
983: デフォルトの名無しさん [sage] 2021/03/10(水) 02:28:31.13 ID:ixLG+AYE hoge(,|$) やりたいのはコレじゃない? http://mevius.5ch.net/test/read.cgi/tech/1548981877/983
984: デフォルトの名無しさん [sage] 2021/03/10(水) 06:16:01.51 ID:S+G6vYN6 >>980 近いといえば近いが、そういう書き方をしたいなら「, で始まる文字列」じゃないか。 hoge(,.*)?$ あと、Perl には \z もあるよ。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/984
985: 976 [sage] 2021/03/11(木) 11:15:21.72 ID:VAAe2gi6 みなさん、こんなアホに付き合ってもらってありがとうございます。 疲れてたのかな、俺。 まだ試してませんが、教えていただいたやり方でチャレンジしてみます。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/985
986: 532 [sage] 2021/03/11(木) 11:39:56.33 ID:AlcqB+X5 $pat = 'hoge(?:,.*)?$'; print "1\n" if 'hoge,dsad' =~ $pat; print "2\n" if 'hoge' =~ $pat; print "3\n" if 'hage' =~ $pat; はどうよ 実行例 ~ $ perl 64_976_hoge_pat.pl 1 2 http://mevius.5ch.net/test/read.cgi/tech/1548981877/986
987: デフォルトの名無しさん [sage] 2021/03/11(木) 14:27:02.78 ID:IdZJgmDv もしかして ¥bhoge¥b がよかったんじゃないの? http://mevius.5ch.net/test/read.cgi/tech/1548981877/987
988: デフォルトの名無しさん [sage] 2021/03/11(木) 14:37:57.64 ID:l5V9NIZG splitをうまく使うと解決したかも http://mevius.5ch.net/test/read.cgi/tech/1548981877/988
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 14 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.015s