過去の桐井戸端BBS (桐ver.9)
29601 表の各レコード毎に「印刷したときのページ」のデータを自動的に付与したい さかいひろし 2005/04/10-15:18
 みなさん、こんにちは。
「五十の手習い」で桐9を使ってます。
Dos版のV1からですから使用歴20年位の初心者です。
周囲に桐ユーザーがいないので、すみませんが以下の解決方法をご存知の方はご教授下さい。

 約60,000件の地名データベースを扱っています。都道府県順に並べた一覧表印刷(フッダにページ印刷をしています)で
「地名一覧」を作成しました。
これとは別に「地名索引」を作成しようと考えています。
つまり任意の地名を索引した時、印刷した「地名一覧」の何ぺージにその地名があるかが分かるような表を作成し印刷したいのです。
項目として「一覧表ページ」などと作成し、前出の「地名一覧」の印刷ページ番号を自動的に引用する方法はあるのでしょうか?
(ヘルプを参考にしてみましたが、「#頁番号」は、レポート印刷の時のみ使用可能とあり、
通常の「表」では使用できないようです。)印刷様式の変更やデータ行の挿入によって
全体の印刷ページが変更されても、自動的に対応するような「魔法のおまじない」は、ありませんでしょうか?

29602 Re:各レコード毎に「印刷ページ」のデータを自動的に付与できませんか? うにん 2005/04/10-20:18
記事番号29601へのコメント

>レポート印刷の時のみ使用可能とあり、通常の「表」では使用できないよう
>です。)印刷様式の変更やデータ行の挿入によって全体の印刷ページが変更
>されても、自動的に対応するような「魔法のおまじない」は、ありませんで
>しょうか?

ページ番号をデータとして入れるとそれによってページ番号が変わってしまう可能性がありますから、できたとしたら「魔法」でしょう。

印刷結果をHTML保存して、そこからキーワードを使って取り出すとかなら考えられるかもしれません。

29606 印刷ページ番号の取得は大変に困難です 佐田 守弘 2005/04/10-23:33
記事番号29601へのコメント
さかいひろしさん
結論的な事を言えば、印刷ページ番号の取得は、大変に困難な問題です。
●印刷ページ番号
まず先に一般論からお話します。
ワープロソフトでは最初からページ割りをしながら文書を作って行くので、ページ番号が比較的簡単に分ります。
しかし切りの様なデータベースでは、印刷してみないとページ番号が分らないのが実情です。
一覧表印刷でもレポート印刷でも、それぞれ自由なレイアウトが作れますから、
何ページに印刷されるのかも含めて、あるデータがどのページに印刷されるのかは、印刷してみないと分らないのです。
「#頁番号」関数は、レポートの中で、印刷しながらそのページ番号を決めて行く関数なので、レポートの中でしか使えません。

●表の上だけでページ番号を知りたい
確かにこの様な要望がある事は確かなのですが、一般論的には不可能です。
ですが、ある制限を設ければ、その制限の中でページ数を出す事はある程度できます。

・印刷行数を固定する
一覧表印刷でも、レポート印刷でも、1レコードの行数を固定する事ができます。
文字数が多くても少なくても、常に2行で印刷するといった設定です。
行数が固定されれば、一覧表印刷ないしレポートの定義の上で、1ページに印刷されるレコード数を決める事ができます。
仮に1ページに20レコード固定であるとすれば、レコードの先頭から20行毎にインクリメントする連番号を作れば、
それが印刷されるページ番号になります。
もしどうしても印刷ページ番号を知りたいのであれば、この様にして印刷行数を固定するのが手っ取り早い方法です。

●1レコードの印刷行数が変動する場合
MS-DOS版では比較的簡単に印刷行数が求められたのですが、Windows環境ではかなり困難な課題になります。
印刷に使う文字フォントが固定ピッチフォントであれば、フォントの横幅と、
文字間のピッチ(これは設定で変わる)から、1文字印刷するピッチが求められます。
レコード毎に文字数に1文字の印刷ピッチを掛け、印刷する場所の横幅で割れば、
およその行数は求められます。ただし実際のプリンタで印刷した時の行数が計算値通りになるとは限りません。

 >印刷様式の変更やデータ行の挿入によって全体の印刷ページが変更
 >されても、自動的に対応するような
と書かれていますが、設定が変更されたら、その都度設定に応じた文字ピッチや横幅で計算し直さなければなりません。

そしてプロポーショナルフォントで印刷する場合だと、ある文字列を印刷するのに必要な行数を計算する事は、ほぼ不可能です。
要するに印刷をエミュレートしてみないと、どの様に割付けられるかは、分らないのです。

桐はレポート印刷の時にその様なエミュレートをしながら、ページ番号などを
割り当てる計算をしているのだと思いますが、その途中経過は取り出せません。

佐田守弘(KS-00119)
29607 Re:各レコード毎に「印刷ページ」のデータを自動的に付与できませんか? T.Samura 2005/04/11-09:32
記事番号29601へのコメント
 さかいひろしさん、こんにちは。

 うにんさんが書かれている様にhtml書き出しの解析も一つの方法ですが
テストしたら印刷プレビューとは微妙に表示桁数(データ追い出し桁数)が
異なり、すんなりとは行かないようです。html書き出し時の表示桁数を一覧表印刷の桁数と変えて調整し、
同じ改ページ位置にするなどすれば、html解析も成功するかもしれません。

 もう一点SE的に見ると、約60,000件の一覧表印刷物から探す為に地名索引の一覧表印刷をするということですが、
どちらも数百頁以上の印刷量なら単純に地名で並び替えた約60,000件の一覧表印刷をするのではいけないのでしょうか。
 また大量のデータの検索なら印刷物から探すよりパソコン上でするのが早いので、
屋外で使いたいのならノートパソコンという手段も有ります。
どのみち大量の印刷物を持ち運ぶ事を考えればノートパソコンで代用するのも可能かと思います。
29608 Re:各レコード毎に「印刷ページ」のデータを自動的に付与できませんか? 今村 誠 2005/04/11-10:17
記事番号29601へのコメント
さかいひろしさんこんにちは、複合レポートの中に一覧表を作成して
例えば郵便番号簿の各市町村毎の地名一覧を15インチの連続紙を使い、
レポートの4段組でページヘッダにあふれ改ページに市町村を指定し、
市町村とページ番号を印字するために下記のテキストを作り各ページ全てをプレビューすると

[電話住所]+#計算(#代入(&秒,#cond(&秒>3,1,1,&秒+1)),
#代入(&市町村[#page],#s(&市町村[#page],&秒,[電話住所])),
#cond(&秒>3,#last(#str(#page),
#cond(#桁数([電話住所])>21,-(#桁数(#str(#page))+1),
1,-((22+#桁数(#str(#page))+1)-#桁数([電話住所]))))))

配列の共通変数(&市町村)に以下のような変数値が入ります。

宮城県加美郡加美町,宮城県志田郡三本木町,宮城県玉造郡岩出山町,宮城県玉造郡鳴子町

試験的に作ってみました。12万件の郵政公社のデータで
明細部を1行にして[郵便番号]を23.1mmで[町]を62.9mmにして
印刷すると870ページほど必要のようです。
 この共通変数は環境設定の一括タブの高度な設定で
共通変数のサイズを128kbとしておく必要があります。
データが半分なら規定値の64kbでもいいかもしれません。

&秒を初期化するために、複合レポートの明細(1)と
一覧表(1)の間にオブジェクトリストで下記のテキストを
#計算(#代入(&秒,0),"")作成しておきます。
29609 Re:各レコード毎に「印刷ページ」のデータを自動的に付与できませんか? 尾形 2005/04/11-10:33
記事番号29601へのコメント
どうも、こんにちは

無謀でしょうけど
配列変数で要素数を60000つけて印刷するとか (^^;

29611 Re:各レコード毎に「印刷ページ」のデータを自動的に付与できませんか? うにん 2005/04/11-12:21
記事番号29609へのコメント

なるほど、配列に入れておくという手がありましたか。
今村さんのようにするにしてもあらかじめ総ページ数を取っておかないと
配列を宣言できないのが桐の弱点ですが。
最大128KBでは6万行だと1行あたり2バイトの計算になってしまいますし。。。

>無謀でしょうけど
>配列変数で要素数を60000つけて印刷するとか (^^;

理論値で最大16384なのでこれはさすがに無謀かも。

29612 Re:各レコード毎に「印刷ページ」のデータを自動的に付与できませんか? うにん 2005/04/11-12:32
記事番号29607へのコメント

>テストしたら印刷プレビューとは微妙に表示桁数(データ追い出し桁数)が
>異なり、すんなりとは行かないようです。

私のとこでは、微妙どころか印刷するレコード数自体がまるっきり違ってしまいました。
何か変?_?
#タグ文字を実体参照にしないでそのまま出力するオプションがあったような
#気がしたのですが見つかりませんでした。(行ごとにinputタグを埋め込もうとした)
#最近のブラウザなら何も細工しなくてもテーブルの要素を抜き出すくらいは
#できるでしょうね。

29618 Re:各レコード毎に「印刷ページ」のデータを自動的に付与できませんか? T.Samura 2005/04/11-16:19
記事番号29612へのコメント
 うにんさん、こんにちは。
 桐V9体験版の ..\KIRIV9\Sample\例題\表リファレンス\ZIPK3.TBL をデフォルトで
一覧表新規作成のhtml書き出しとプレビューをすると共に1頁54レコードでした。
 印字項目の[住所]の桁数を10にすると、html書き出しでは2バイト
12文字以降で追い出しが始まり1頁54レコードは変わらず、
プレビューだと5文字以降で追い出しが始まり1頁目は24レコードで一致しなくなります。
 よくみたらhtml書き出しは1レコードのデータ行が複数になってもページ内レコード数は変わらないみたいですね。
てっきり追い出しが掛かるのでページ内レコード数も調整されていると思って確認してませんでした。
29624 Re:各レコード毎に「印刷ページ」のデータを自動的に付与できませんか? うにん 2005/04/11-20:10
記事番号29618へのコメント

> よくみたらhtml書き出しは1レコードのデータ行が複数になっても
>ページ内レコード数は変わらないみたいですね。

なるほど、そういうことですか。
HTML出力の目的にもよるんでしょうけど、どっちがいいのかな=_=
どっちみち今回の目的には合いませんでしたね>_<

戻る