[過去ログ] Perlについての質問箱 64箱目 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
513
(1): 2020/07/24(金)11:37 ID:nuOKXnku(1) AAS
オレなら、バイナリーエディタの置換機能を使うと思うが。
514
(1): 2020/07/24(金)11:40 ID:61Z/1/Bp(1/2) AAS
数が多いとツール作った方が早い
手動でやってもツール作っても時間同じなら、ツール作った方がいい
仕事では、ツール作ったせいで余計に時間かかってもツール作る
515
(1): 2020/07/24(金)11:53 ID:JRbdBOQM(2/10) AAS
>>513
データが大きいのでLinuxのバイナリエディタでは上手く行かないのです
516: 2020/07/24(金)12:54 ID:JRbdBOQM(3/10) AAS
画像リンク


この文字列が一定間隔で現れます
データが大きいので>>514さんの言うとおりツール(スクリプト)で処理したいのです
517
(1): 2020/07/24(金)15:39 ID:EkE5sKTE(1/3) AAS
perl -e "binmode STDIN; binmode STDOUT; while (read STDIN, $_, 0x8000) { substr $_, 0x1c, 1, 0; print }" < IN > OUT
これが最短?
518: 2020/07/24(金)15:58 ID:JRbdBOQM(4/10) AAS
>>517
レスありがとうございます
泣きそうです(解らなすぎて)

>>509のスクリプトはバイナリ修正したコピーファイルを作成するものでした
小さなファイルなので問題ないのですが、目的の対象ファイルは10GB~20GBもあるものなのでマネ出来ません
519: 2020/07/24(金)16:06 ID:JRbdBOQM(5/10) AAS
>>509の全文です

画像リンク


後出しのクセが強すぎすいません
520: 2020/07/24(金)16:07 ID:UzZpGBU/(1) AAS
>>515
なるほどね。しかし、perlが扱えるデータ量にも、よく解らない限界があって、
巨大なデータを突っ込むと勝手に途中で切られたりするみたいだよ。
巨大なデータを扱うなら、seek関数みたいな低水準な手法を使う必要があるかもしれない。
521
(1): 2020/07/24(金)16:48 ID:EkE5sKTE(2/3) AAS
直接書き換えたいならこんなとか?
perl -e 'open F, "+< IN"; binmode F; while ($l = read F, $_, 0x8000) { substr $_, 0x1c, 1, "\0";
seek F, -$l, 1; print F }'
522: 2020/07/24(金)17:06 ID:61Z/1/Bp(2/2) AAS
別に短く書くコンテストではない
523
(1): 2020/07/24(金)17:06 ID:JRbdBOQM(6/10) AAS
>>521
ありがとうございます
Fはファイル名でよろしいでしょうか?(素人でごめんなさい)

Can't find string terminator "'" anywhere before EOF at -e line 1.
となります
524: 2020/07/24(金)17:29 ID:JRbdBOQM(7/10) AAS
サンプルです
外部リンク[SRO]:www.dropbox.com

もしよろしければ暇つぶしに、ご指南いただけませんか?
(もう、いただいてますけど)
525: 2020/07/24(金)17:49 ID:JRbdBOQM(8/10) AAS
よく考えたらダメだったw
526: 2020/07/24(金)19:45 ID:lCl1FARv(1) AAS
GBレベルのファイルがオンメモリで処理できるわけないだろ。w
527: 2020/07/24(金)20:07 ID:iJ+2fZSI(1) AAS
メモリが1TBあればヘーキヘーキ
528: 2020/07/24(金)20:38 ID:So4dssPK(2/4) AAS
Stream 処理なら、バッファサイズ分のデータを、読んでは捨ててを繰り返すから、
必要なメモリサイズは、バッファサイズ分だけ

それか、seek みたいに、その番地をシークして、そこだけ書き換える
529: 511 2020/07/24(金)21:01 ID:So4dssPK(3/4) AAS
0x8000 は、32,768 バイトだから、32 KiB。
(ただし、Kib は、1,000 倍ではなく、1,024 倍)

32 KiB * 32 個 = 1 MiB

1 GiB なら、 32個 * 1,024 = 32,768個
10GiB なら、0x8000サイズのブロックが、327,680個もあるの?

データ部分は固定サイズなの?
変動サイズで、そのサイズがヘッダ内に記録されているとかじゃないの?
530
(6): 2020/07/24(金)21:50 ID:EkE5sKTE(3/3) AAS
まーだやってたのか
>>523

perl -e 'open F, "+< ファイル名"; binmode F; while ($l = read F, $_, 0x8000) { substr $_, 0x1c, 1, "\0"; seek F, -$l, 1; print F }'

がエラーになったのは Windows のコマンドプロンプトで試したんだろ
コマンドプロンプトでは ' でなく " を使ってこう

perl -e "open F, '+< ファイル名'; binmode F; while ($l = read F, $_, 0x8000) { substr $_, 0x1c, 1, qq/\0/; seek F, -$l, 1; print F }"

もちろん read や print は流れで残してただけでまったく必要ないから

perl -e "open F, q/+< ファイル名/; binmode F; seek F, 0x1c, 0; while (! eof F) { seek F, 0, 1; print F qq/\0/; seek F, 0x7fff, 1 }"

で十分なのは言うまでもない
コマンドラインで書き捨てじゃないならperl7で不可予定の F じゃなくて $fh にするかな
531: 511 2020/07/24(金)22:51 ID:So4dssPK(4/4) AAS
くれぐれも、データのバックアップを取っておいてから、実験しろよ。
もし、プログラムが間違っていたら、回復できないから

そもそも、他人のプログラムの意味が分からないのに、
それをそのまま実行するのは、非常に危険!
532
(23): 532 2020/07/24(金)23:35 ID:Z8MDOpZc(1/4) AAS
Binary fileをupdateモードでopenして
目的の位置にseekしpackで元のファイルの内容を直接書き換える方法なら

外部リンク[htm]:docstore.mik.ua
533: 532 2020/07/24(金)23:36 ID:Z8MDOpZc(2/4) AAS
>>530 と内容が被った…orz
534: 532 2020/07/24(金)23:40 ID:Z8MDOpZc(3/4) AAS
この辺調べてやってくだされぃ
外部リンク:www.google.co.jp
535: 532 2020/07/24(金)23:45 ID:Z8MDOpZc(4/4) AAS
先生ッ、便利そうなモジュール見つけました!
外部リンク:metacpan.org
536: 2020/07/24(金)23:46 ID:JRbdBOQM(9/10) AAS
>>530
検証に時間がかかってしまって返信遅くなりました
できました!! ありがとうございました!

推察の通りコマンドプロンプトでのエラーでした
本命のLinux(Ubuntu)の端末上からも書き換え成功しました
感謝です

ほかの皆様もありがとうございました
不愉快に感じた方も多かったと思います ごめんなさい

ここで「進捗状況表示(%)をさせるにはどうしたらいいですか?」とか聞くと嫌われることは、僕もいい大人なので知っています
537: 2020/07/24(金)23:48 ID:JRbdBOQM(10/10) AAS
>>532
親切にありがとうございます
538
(1): 2020/07/25(土)00:54 ID:uhXYZAuD(1) AAS
進捗状況を表示させるには、最初にファイルサイズを取得する。
そして、データを書き換えるたびに、現在のseek 番地を取得して、

現在のseek 番地 × 100 / ファイルサイズ

例えば、300 × 100 / 1,000 = 30 %
539
(1): 2020/07/25(土)01:23 ID:c7rlqrmm(1) AAS
>>538
レスありがとうございます
本当にうれしいのですがド素人なので理解出来ないのです

>>530のコマンドラインに絡めるかスクリプトにしていただけると卒倒するほど喜びます
これを機会にperlを勉強したいと(心から)思いますが、今の段階ではこんな図々しいお願いをするしか出来ません
540
(1): 2020/07/25(土)02:26 ID:GJL3/5bG(1) AAS
もうええやろ?
541: 2020/07/26(日)01:36 ID:5SabrGL+(1) AAS
>>539
死ねよ
542: 2020/07/26(日)02:35 ID:T0U3lDAz(1) AAS
勉強する気はなしか
やれやれ
1-
あと 460 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.032s