[過去ログ]
Perlについての質問箱 64箱目 (1002レス)
Perlについての質問箱 64箱目 http://mevius.5ch.net/test/read.cgi/tech/1548981877/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
508: デフォルトの名無しさん [sage] 2020/07/23(木) 19:09:07.35 ID:NaEhWCW1 コードそのものを書いてくれとさ http://mevius.5ch.net/test/read.cgi/tech/1548981877/508
509: デフォルトの名無しさん [sage] 2020/07/23(木) 19:25:52.21 ID:2kWEZYuR 同じような目的の別のスクリプトです これに近いイメージでしょうか (全文書くとブロックされる) _________________________________________________________ HR_MANGR.IFOのコピー禁止フラグ解除は、 0x20 0x2C 0x23のシーケンスを0x20 0x24 0x23 に変更 perlスクリプトの例は以下のとおり。 # freeifo.pl # HR_MANGR.IFOの変換 use strict; use warnings; my $infile = "HR_MANGR.IFO"; my $buf; my $sTarget = " ,#"; # 0x20 0x2C 0x23 #
ファイルのオープン # バイナリモードに変更 binmode INFILE; binmode OUTFILE; my $sizIFO = -s $infile; # IFOファイルを読み込み # 0x20 0x2C 0x23 の並びがあれば、0x20 0x24 0x23 に置き換え #他にあれば継続、無ければ終了 # ファイルのクローズ close INFILE; close OUTFILE; http://mevius.5ch.net/test/read.cgi/tech/1548981877/509
510: デフォルトの名無しさん [] 2020/07/24(金) 04:55:58.03 ID:6ZonvnML そうそう。そんな感じ。 まあ頑張って。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/510
511: デフォルトの名無しさん [sage] 2020/07/24(金) 09:07:49.48 ID:So4dssPK 書き換える番地は、N は、0 以上で、以下の法則か? 0x8000 × N + ( 0x80 + 0x1C ) つまり、ヘッダは必ず、0x8000 毎にあるのか? http://mevius.5ch.net/test/read.cgi/tech/1548981877/511
512: デフォルトの名無しさん [sage] 2020/07/24(金) 11:24:40.72 ID:JRbdBOQM >>511 レスありがとうございます ________________________________________________ SROファイルの書き換え 000000-00007F 東芝ヘッダ 000080-007FFF (データA) 008000-00807F 東芝ヘッダ 008080-00FFFF (データB) 010000-01007F 東芝ヘッダ 010080-01FFFF (データC) というふうに、0x8000バイトで1セットとなっている。 東芝ヘッダとは、0x80バイトからなるデータブロック。途中に## Toshiba 〜という文字列を含んでいる
東芝ヘッダのコピー禁止フラグ(CPP)のあるオフセット0x1Cを 0x40 ⇒ 0x00 に修正。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/512
513: デフォルトの名無しさん [sage] 2020/07/24(金) 11:37:31.23 ID:nuOKXnku オレなら、バイナリーエディタの置換機能を使うと思うが。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/513
514: デフォルトの名無しさん [sage] 2020/07/24(金) 11:40:12.29 ID:61Z/1/Bp 数が多いとツール作った方が早い 手動でやってもツール作っても時間同じなら、ツール作った方がいい 仕事では、ツール作ったせいで余計に時間かかってもツール作る http://mevius.5ch.net/test/read.cgi/tech/1548981877/514
515: デフォルトの名無しさん [sage] 2020/07/24(金) 11:53:07.60 ID:JRbdBOQM >>513 データが大きいのでLinuxのバイナリエディタでは上手く行かないのです http://mevius.5ch.net/test/read.cgi/tech/1548981877/515
516: デフォルトの名無しさん [sage] 2020/07/24(金) 12:54:55.96 ID:JRbdBOQM https://i.imgur.com/Y6NhiUE.jpg この文字列が一定間隔で現れます データが大きいので>>514さんの言うとおりツール(スクリプト)で処理したいのです http://mevius.5ch.net/test/read.cgi/tech/1548981877/516
517: デフォルトの名無しさん [sage] 2020/07/24(金) 15:39:03.44 ID:EkE5sKTE perl -e "binmode STDIN; binmode STDOUT; while (read STDIN, $_, 0x8000) { substr $_, 0x1c, 1, 0; print }" < IN > OUT これが最短? http://mevius.5ch.net/test/read.cgi/tech/1548981877/517
518: デフォルトの名無しさん [sage] 2020/07/24(金) 15:58:32.23 ID:JRbdBOQM >>517 レスありがとうございます 泣きそうです(解らなすぎて) >>509のスクリプトはバイナリ修正したコピーファイルを作成するものでした 小さなファイルなので問題ないのですが、目的の対象ファイルは10GB~20GBもあるものなのでマネ出来ません http://mevius.5ch.net/test/read.cgi/tech/1548981877/518
519: デフォルトの名無しさん [sage] 2020/07/24(金) 16:06:11.64 ID:JRbdBOQM >>509の全文です https://i.imgur.com/qOj8IAs.jpg 後出しのクセが強すぎすいません http://mevius.5ch.net/test/read.cgi/tech/1548981877/519
520: デフォルトの名無しさん [sage] 2020/07/24(金) 16:07:20.05 ID:UzZpGBU/ >>515 なるほどね。しかし、perlが扱えるデータ量にも、よく解らない限界があって、 巨大なデータを突っ込むと勝手に途中で切られたりするみたいだよ。 巨大なデータを扱うなら、seek関数みたいな低水準な手法を使う必要があるかもしれない。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/520
521: デフォルトの名無しさん [sage] 2020/07/24(金) 16:48:28.89 ID:EkE5sKTE 直接書き換えたいならこんなとか? perl -e 'open F, "+< IN"; binmode F; while ($l = read F, $_, 0x8000) { substr $_, 0x1c, 1, "\0"; seek F, -$l, 1; print F }' http://mevius.5ch.net/test/read.cgi/tech/1548981877/521
522: デフォルトの名無しさん [sage] 2020/07/24(金) 17:06:33.72 ID:61Z/1/Bp 別に短く書くコンテストではない http://mevius.5ch.net/test/read.cgi/tech/1548981877/522
523: デフォルトの名無しさん [] 2020/07/24(金) 17:06:42.97 ID:JRbdBOQM >>521 ありがとうございます Fはファイル名でよろしいでしょうか?(素人でごめんなさい) Can't find string terminator "'" anywhere before EOF at -e line 1. となります http://mevius.5ch.net/test/read.cgi/tech/1548981877/523
524: デフォルトの名無しさん [] 2020/07/24(金) 17:29:22.03 ID:JRbdBOQM サンプルです https://www.dropbox.com/s/zjhagi19dx0akbv/HR_STR01.SRO?dl=0 もしよろしければ暇つぶしに、ご指南いただけませんか? (もう、いただいてますけど) http://mevius.5ch.net/test/read.cgi/tech/1548981877/524
525: デフォルトの名無しさん [sage] 2020/07/24(金) 17:49:05.64 ID:JRbdBOQM よく考えたらダメだったw http://mevius.5ch.net/test/read.cgi/tech/1548981877/525
526: デフォルトの名無しさん [sage] 2020/07/24(金) 19:45:46.20 ID:lCl1FARv GBレベルのファイルがオンメモリで処理できるわけないだろ。w http://mevius.5ch.net/test/read.cgi/tech/1548981877/526
527: デフォルトの名無しさん [sage] 2020/07/24(金) 20:07:01.97 ID:iJ+2fZSI メモリが1TBあればヘーキヘーキ http://mevius.5ch.net/test/read.cgi/tech/1548981877/527
528: デフォルトの名無しさん [sage] 2020/07/24(金) 20:38:39.07 ID:So4dssPK Stream 処理なら、バッファサイズ分のデータを、読んでは捨ててを繰り返すから、 必要なメモリサイズは、バッファサイズ分だけ それか、seek みたいに、その番地をシークして、そこだけ書き換える http://mevius.5ch.net/test/read.cgi/tech/1548981877/528
529: 511 [sage] 2020/07/24(金) 21:01:04.13 ID:So4dssPK 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個もあるの? データ部分は固定サイズなの? 変動サイズで、そのサイズがヘッダ内に記録されているとかじゃないの? http://mevius.5ch.net/test/read.cgi/tech/1548981877/529
530: デフォルトの名無しさん [sage] 2020/07/24(金) 21:50:07.62 ID:EkE5sKTE まーだやってたのか >>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 にするかな http://mevius.5ch.net/test/read.cgi/tech/1548981877/530
531: 511 [sage] 2020/07/24(金) 22:51:07.42 ID:So4dssPK くれぐれも、データのバックアップを取っておいてから、実験しろよ。 もし、プログラムが間違っていたら、回復できないから そもそも、他人のプログラムの意味が分からないのに、 それをそのまま実行するのは、非常に危険! http://mevius.5ch.net/test/read.cgi/tech/1548981877/531
532: 532 [sage] 2020/07/24(金) 23:35:26.56 ID:Z8MDOpZc Binary fileをupdateモードでopenして 目的の位置にseekしpackで元のファイルの内容を直接書き換える方法なら ttps://docstore.mik.ua/orelly/perl/cookbook/ch08_14.htm http://mevius.5ch.net/test/read.cgi/tech/1548981877/532
533: 532 [sage] 2020/07/24(金) 23:36:19.14 ID:Z8MDOpZc >>530 と内容が被った…orz http://mevius.5ch.net/test/read.cgi/tech/1548981877/533
534: 532 [sage] 2020/07/24(金) 23:40:56.85 ID:Z8MDOpZc この辺調べてやってくだされぃ https://www.google.co.jp/search?q=perl+binary+file+update+open+seek+unpack http://mevius.5ch.net/test/read.cgi/tech/1548981877/534
535: 532 [sage] 2020/07/24(金) 23:45:28.89 ID:Z8MDOpZc 先生ッ、便利そうなモジュール見つけました! https://metacpan.org/pod/File::Binary http://mevius.5ch.net/test/read.cgi/tech/1548981877/535
536: デフォルトの名無しさん [] 2020/07/24(金) 23:46:10.28 ID:JRbdBOQM >>530 検証に時間がかかってしまって返信遅くなりました できました!! ありがとうございました! 推察の通りコマンドプロンプトでのエラーでした 本命のLinux(Ubuntu)の端末上からも書き換え成功しました 感謝です ほかの皆様もありがとうございました 不愉快に感じた方も多かったと思います ごめんなさい ここで「進捗状況表示(%)をさせるにはどうしたらいいですか?」とか聞くと嫌われることは、僕もいい大人なので知っています http://mevius.5ch.net/te
st/read.cgi/tech/1548981877/536
537: デフォルトの名無しさん [] 2020/07/24(金) 23:48:59.17 ID:JRbdBOQM >>532 親切にありがとうございます http://mevius.5ch.net/test/read.cgi/tech/1548981877/537
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 465 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.025s