一括表示

− 野ざらし言 −

[2463] マクロ作成依頼予告、かな?

としき 2008/01/26(Sat) 00:49
http://www.hinocatv.ne.jp/~toshiki/
#2462を読んでいて、あると便利だけれど作るほどのことはないな、と思った
マクロがあることを思い出してしまいました。
どんなものかというと、連続ブロックセーブマクロ、でいいのかな。

元データは、基本となるものは、一つのレコードはyabyaxのような感じで、
開始行と終了行がユニークなものです。一つのファイルに、このようなレコ
ードが複数入っています。これを、テンポラリディレクトリに、1レコード
毎に連番でセーブしたい、というのが一番基本となる仕様。

ところが、この、基本となるものに色々と条件がくっついていたりするわけ
なんですよ。
まず、使い方としては、ファイル先頭で起動すると、ファイル終端まで自動
で処理してくれる、というものが希望。ただ、ここで、誤実行を防止するた
めに、ファイル先頭であることのチェックがほしい。また、同じ理由で、あ
えてキーアサインを割り振らないようにしておきます。

後回しにしましたが、データの定義は、実はイレギュラーなものの比率がか
なり高かったりします。基本は上記の通りで、レコードとレコードの間には
空行が2行入っているのが基本なんですが、これが現実には不定。空行0行
で終了行と開始行が連続していたり、あるいは3行だったりと、2行である
ことが一番多い、という程度のもの。もっとひどくなると、終了行そのもの
が欠落してしまっていたりすることもあったりなんかするわけです。このよ
うな場合があることを考えると、終了行までのブロックではなく、次のレコ
ードが始まる手前までブロック、の方がいいような気もしますが、そうする
と分割したレコードの尻尾に余分な空行がついてしまうことが発生するわけ
で、これをどうしたらよいものか。ま、空行がついている分には害もないん
で、気にしない、というのが一番建設的なような気もします。
最後、開始行と終了行の設定について、マクロ内部に持ってしまってもあま
り問題はないのですが、希望としては、psに持っている文字列を使いたい、
というのがあったりします。つまり、[F5]あたりで取得した文字列でサクサ
クとファイル分割できるととってもうれしいわけです。

で、まぁ、今まではawkで分割してきたわけですが、些細な不都合があって。
データはほとんどは2バイト改行文字を使っているのですが、たまに、1バ
イト改行文字が混ざっています。ところが、私の使っているjgawkだと、強制
的に2バイト改行文字に変換されてしまうのです。結果、分割後のファイル
合計が分割前のファイルサイズと一致しない、という状況になってしまうの
です。この点は、Vzで分割すれば起こりえない部分なので、それでマクロ
で実施できないかな、と考えているわけだったのでした。

これ、全然急ぎではない案件なんで、そのうちのんびり作ってみたいと思い
ます。もし、何かわからないことが出たら、また書き込ませていただきます。
 

[2467] Re: マクロ作成依頼予告、かな?

めざら 2008/01/26(Sat) 16:39
[2463]へのコメント <mezala@nifty.com> http://homepage3.nifty.com/mezala/
 ファイルの分割なら,Si さんの TU.exe が便利ですね。
http://dmz.xrea.jp/dahlia/soft/index_s.html#TU

 このソフト,何と改行コードも整えてくれます。
 分割位置指定は,もちろん正規表現が使えます。マクロを作るという意欲を
そごうとしているわけではありませんが,試してみる価値はあると思います。

 手に馴染まなければ,とことんこだわりのマクロを作るお手伝いはもちろん
させていただきますけれどね。

 わたしもこのところちょっとだけ作成意欲が上昇中なので。

[2468] Re^2: マクロ作成依頼予告、かな?

としき@宿直 2008/01/26(Sat) 17:51
[2467]へのコメント http://www.hinocatv.ne.jp/~toshiki/
>  ファイルの分割なら,Si さんの TU.exe が便利ですね。

帰宅したら試してみましょう。が、

>  このソフト,何と改行コードも整えてくれます。

今回の要件は、改行コードに変更が加わってはならない、というものです。
仮に入力が不統一であるのなら、不統一のまま出力される必要があるのです。
なので、この辺がちょっと気がかり。

[2469] Re^3: マクロ作成依頼予告、かな?

めざら 2008/01/27(Sun) 11:23
[2468]へのコメント <mezala@nifty.com> http://homepage3.nifty.com/mezala/
> 仮に入力が不統一であるのなら、不統一のまま出力される必要があるのです。

 コマンドラインオプションで指示しなければ,そのまま出力されます。
 …だったと思うけど。

[2475] Re^2: マクロ作成依頼予告、かな?

としき 2008/01/27(Sun) 18:34
[2467]へのコメント http://www.hinocatv.ne.jp/~toshiki/
>  ファイルの分割なら,Si さんの TU.exe が便利ですね。

とりあえずダウンロードしました。
あとでじっくり試してみます。

>  手に馴染まなければ,とことんこだわりのマクロを作るお手伝いはもちろん
> させていただきますけれどね。

なんとなくの印象ですが、今まで使っていたawkのスクリプトでも、実行する
環境をjgawkからmawkに変えれば問題は解決するような気がしています。
 

[2477] Re^3: 解決しました

としき 2008/01/28(Mon) 11:55
[2475]へのコメント http://www.hinocatv.ne.jp/~toshiki/
> >  ファイルの分割なら,Si さんの TU.exe が便利ですね。

これ、便利ですね。
分割したいところですぱすぱと切れてくれました。

実は、本来の目標としては、あるグループ毎に分割したいのですよ。
例えば、日付毎、みたいな感じと言えばわかりやすいかな。
だけど、それを自動で行うのは著しく困難。なぜというに、前にも述べまし
たが、終了行が欠落することがあるのだけど、日付は終了行に記載されてい
る、というイメージ。もちろん、そのデータの内容から、日付というか、そ
のデータをデータのどちらの要素に結合させればよいか、または独立させる
べきかというのは判断できますが、さすがに自動で行うのはちと無理がある。
なので、全ての要素に分割してから手動で結合するという手段をとらざるを
えないわけで。
今回使ったテストケースでいうと、全部で44個のファイルに分割してから
13個のファイルに結合する事になります。

> なんとなくの印象ですが、今まで使っていたawkのスクリプトでも、実行する
> 環境をjgawkからmawkに変えれば問題は解決するような気がしています。

こちらでもうまく行きました。
gawk系の複数の実行環境でも試したのですが、こちらは全て改行が変換され
てしまいました。mawkでもデフォルトでは改行が変換されてしまいましたが、
こちらにはバイナリーモードというのがあって、これを使えば変換されずに
出力されました。さらにその上、ありがたい副作用もあって。
今回使ったスクリプトでは「^開始行」みたいな正規表現を使って、行頭から
マーカーとなる文字列が現れたらそこで出力先を切り替えるという形になっ
ていました。ところが、今回のテストケースではたまたまかもしれませんが、
分割後に再結合しようと思っていた個所の「ほとんど」で直前の改行コード
が異なっていたらしく、つまり行頭の正規表現がマッチしなかったようで、
バイナリーモードでは最初から分割されずに出力されたのです。なので、テ
ストケースとして上記と同じファイルを流した結果、14個のファイルに分
割されて、1つだけ再結合するだけですんでしまう事になりました。
逆に言うとこれは、分割してほしいところで分割されない可能性があるわけ
で、常用するにはちょっと恐いのですが、後工程の手間が省ける可能性もあ
って、まずはこちらのスクリプトで試して、うまく行かなかったらTU.EXEで
あらためて分割する、という形の運用がよさげです。

今回はなかなかナイスなソフトの紹介、どうもありがとうございました。
 

[2478] Re^4: 解決しました

めざら 2008/01/30(Wed) 11:01
[2477]へのコメント <mezala@nifty.com> http://homepage3.nifty.com/mezala/index.html
> 今回はなかなかナイスなソフトの紹介、どうもありがとうございました。

 それは祝着。まぁ,お礼は Si さんにどうぞ。璧では TU も紹介してました。
 http://homepage3.nifty.com/mezala/vz/links.html#si_dmz

 あと便利にする要素はあったのでしょうか。awk のスクリプトでの分割精度
に不安があるとすれば,元データの作成環境というか,きちんと区切りを出力
するようにするとか。あれ,でもグループというものがあるのなら,グループ
区切りを明確にする必要があるのですよね。ちょっと難しいですかね〜。

[2479] Re^5: 解決しました

としき 2008/02/01(Fri) 00:22
[2478]へのコメント http://www.hinocatv.ne.jp/~toshiki/
>  あと便利にする要素はあったのでしょうか。awk のスクリプトでの分割精度
> に不安があるとすれば,元データの作成環境というか,きちんと区切りを出力

いや、これ、既にできあがっているものの細工でして。
既存物に手を入れれば後工程が自動化できるとは言え、手を入れる労力と後
工程で削減できる労力を比較すると、後工程で苦労した方がよいという結果
になってしまうんですね。

> するようにするとか。あれ,でもグループというものがあるのなら,グループ
> 区切りを明確にする必要があるのですよね。ちょっと難しいですかね〜。

各レコードの終了行が絶対に欠落しない、という条件であれば、AWKのスクリ
プトだけでなんとかできると思うのですけどね。
それはかなり非現実的なんです。
 

↑ このページの先頭