親にリンクしていてループするのが困るので、
全部の子に対してカウンタを持たせる、くらいしか回避方法が無いんだよな
それだと再帰でやってるうまみが無くなってしまう
>>952
リンクを不用意にたどるな。
既存コマンドでもオプションにしがちだし、ディレクトリ構成によっては死ぬくらいだから、しゃあない。 >>955
何と比べて?
no_chdirを指定したりしたらマシになったりしない? ディレクトリならどこかにある実体のコピーだろうから、リンクなんか無しで済むけど、
より一般化したリスト構造だったら辿らない訳にいかない
だから、事前にループしていないことを確認してから処理することになって、
そのテストがループにはまる
0959デフォルトの名無しさん2021/03/08(月) 20:06:16.14ID:3P7OMB5d
>>957
試してみたが、no_chdirは関係ない。
File::Findは、dir /S /B コマンドのパイプ読み取りに比べて、3倍も時間がかかる。
File::Findは遅いだけでなくコールバックでユーザー変数を扱えない欠点があるから、私はFile::Findを使わない。 0960デフォルトの名無しさん2021/03/08(月) 21:30:38.88ID:3P7OMB5d
File::FindはUnix系OSで使う場合は find コマンドのパイプ読み取りと同等か少し速い。
File::Findが明確に遅いのはWindows向けにビルドされたPerlの場合のみ。
>>960
WindowsのどのPerl?
ひょっとしてCygwin版?
ActivePerlやMSYS2版ならマシだったり? 0962デフォルトの名無しさん2021/03/08(月) 22:39:10.09ID:3P7OMB5d
>>961
残念ながらネイティブに最適化されているはずのActivePerl や Strawberry Perl でFile::Findが遅い。
原因は知らないけどWin32APIの使い方が良くないからだと思う。 $^WIN32_SLOPPY_STAT じゃね?
File::FindはWindowsだと、SJISで全角「構」などの2バイト目が\(0x5c)のフォルダに遭遇すると
無限loopしたり誤動作するから、結局Wndowsでフォルダ階層を再帰的にたどるには
utf8化したperl sourceで自分でopendir, readdirして、encode, decodeせにゃならん。
別件だがWindowsではSJISで全角「構」などの2バイト目が\(0x5c)のフォルダには
perlからlstatやutimeが出来ないみたいで難儀した。
Linuxのutf8のファイルシステムと違ってWindowsのSJISファイルシステムは面倒
>>962
そうやったか。。。
>>964
NTFSファイルシステム自体はUTF-16やぞ?
MicrosoftがようやくいよいよコマンドプロンプトとかNotepadとかのUnicode対応を考えはじめてるし、いずれWindows版も対応するんちゃうか。
いっそツッコんだら? >>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 0967デフォルトの名無しさん2021/03/09(火) 08:00:45.91ID:4CK4kuWA
コマンドプロントはとっくにUTF-16対応している。出力フォントが表示に対応していないだけ。
コマンドプロントにはもう機能追加されないから Windows Terminalに乗り換えたほうがいい。
0968デフォルトの名無しさん2021/03/09(火) 08:27:17.16ID:4CK4kuWA
コマンドプロントは今でもすでに非システムコード文字(アラビア文字やハングルなど)をコマンドに引数渡しできる。
受け取る側のアプリがUTF-16形式で起動時の引数を取らなかったり、batファイルが非システムコード文字に対応していないだけ。
コマンドプロントの努力だけではどうしようもない。
なお、Windows向けビルドされたJavaやPerlは非システムコード文字を引数で受け取れない制約がある。
プログラム側で自力でbase64エンコード対応するなどして回避するしかない。
一方、Windows向けビルドされたPythonは非システムコード文字を引数で受け取ることができる。
Pythonのプラグインを作ったことある人なら分かると思うが、Pythonはインターフェース間の文字列のやりとりにUTF-16を使っている。
NTFSってUTF-16だったのか、
しかしperlのreaddirはcp932で返してきているような気がs…
NTFSはUCS-2で、windowsがUTF-16
それをわざわざcp932に変換して寄越す
>>968
> コマンドプロントの努力だけではどうしようもない。
そらそうや。
ついにcp932から離れようとする世の方向性を受けて、Perlも変わるんじゃねえの、という話。
Perl7とかでそういう話は出てないんかな?
知らんけど。
> なお、Windows向けビルドされたJavaやPerlは非システムコード文字を引数で受け取れない制約がある。
制約つーか、むしろ互換維持とかただ昔のままほったらかしとかやろ。w >>971
そのおかげで、20年以上昔からふつうにWindowsで使えてきたわけだからしゃあない。
むしろありがたかった話。 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 は欲しい
0976デフォルトの名無しさん2021/03/09(火) 20:18:30.71ID:BijZjsz/
正規表現のパターンの中に変数を書くとおかしくなりますが、どうしたらいいでしょうか。
やりたいこと:「hoge」の後ろがカンマか行末の場合を抽出したい
$pat = "hoge[,\$\]";
if( $str =~ m/$pat/ ){...}
こう書くと $pat が「hoge[,$]」になることはデバッガで確認できたのですが、思った通りのマッチになりません。マッチングの部分に $pat ではなく定数で「hoge[,$]」と書けばマッチングします。
どう書いたらいいでしょうか?
[]内は文字セットだからその$は行末マッチじゃないし
09809762021/03/09(火) 22:41:12.95ID:BijZjsz/
色々やって混乱して間違った事を書いていました。
やりたいことは >>976 の通り。
>>979を見てそれならばと「$pat = "hoge,{0,1}\$"」と書いたら目的を達成できました。
お騒がせしました。 >>980
近いといえば近いが、そういう書き方をしたいなら「, で始まる文字列」じゃないか。
hoge(,.*)?$
あと、Perl には \z もあるよ。 みなさん、こんなアホに付き合ってもらってありがとうございます。
疲れてたのかな、俺。
まだ試してませんが、教えていただいたやり方でチャレンジしてみます。
$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
もしかして
¥bhoge¥b
がよかったんじゃないの?
Python勉強中
print('梅')
exit()
10011001Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 780日 13時間 56分 57秒
10021002Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php