過去の桐井戸端BBS (桐ver.8)
13872 複数項目を一度に置換したい oya 2001/11/06-13:45
いつも参考にさせていただいております。桐V8sp6です。
列車の運賃表のような表があるんですが(1000項目×1000データくらい)、
1行データを追加して、それぞれの項目には「直前値+α」と計算させたいと思っています。

a b c d e F
a 0 10 20 30 40 42
b 10 0 15 25 35 37
c 20 15 0 20 30 32
d 30 25 20 0 40 42
e 40 35 30 40 0 2
F 42 37 32 42 2 0

項目Fは、[e]+2で、一括で置換できるのですが、F行はどうゆうやりかたですればよいでしょうか。
繰り返しの中で行訂正させようかと考えたんですが、項目名を変数で取得しても
コマンドにどう生かせばいいのかわかりません。よろしくご教授下さい。
13883 Re:複数項目を一度に置換したい アックン 2001/11/06-18:00
記事番号13872へのコメント
oyaさん、こんばんは。
おそらく他の方から行訂正を使った方法が示されると思いますので、私の方からは別アプローチということで。

データを一見たところ、項目[F]とF行の項目値が同じですから、
項目[F]を書き出し(転置)して、最終行に読み込む、という方法です。
で、実際が違っていたら、この手は使えませんけど。(^^;

ちょっとa,b,cを1,2,3に変更して、例とします。

A 1 2 3 ・・10
1
2
3
:
10

追加項目[11]は既にあるものとします。
行11は一括処理で追加することとします。

**-------
表 "ナントカ.tbl"
置換 [11]=[10]+2

書き出し条件登録 転置,条件名="書出転置01",
"ナントカ_転置書出.tbl",ファイル名変更=しない,データ型=数値,{[A],[11]}

書き出し 転置,条件名="書出転置01"

行追加 [1]=""
ジャンプ 行番号=最終

読み込み条件登録 表,条件名="読込表01","ナントカ_転置書出.tbl",ファイル名
変更=しない
,{[A][A],[1][1],[2][2],[3][3],[4][4],[5][5],[6][6],[7][7],[8][8],[9][9],[10][10]},編集表=する

読み込み 表,条件名="読込表01"

表形式編集
終了
**-------

この一括処理は履歴を利用して作成していますから、項目数が多くても履歴を使えば大丈夫か・・・・
いや、1行あたりの文字数が不足するかな・・・。(^^;

アックン(=^・^=)
13885 Re:複数項目を一度に置換したい 【多遊】 2001/11/06-23:06
記事番号13883へのコメント
>列車の運賃表のような表があるんですが(1000項目×1000データくら
>い)、1行データを追加して、それぞれの項目には「直前値+α」と計算させ
>たいと思っています。

あっくんから、お答えが書いてありますが、項目が(1000項目×1000くらい)
と書いてありましたので、
>{[A][A],[1][1],[2][2],[3][3],[4][4],[5][5]・・・・・・・・
方式は作るのも大変かと思いテストプログラムを作成してみました。


>a 0 10 20 30 40 42
どの場合に10増えてどの場合に2増えるかわかっらないので、
ご質問のお答えにはなってないかと思いますが参考にしてください。
一応全部「+2」として処理を行ってます。

適当な名前で一括処理を作成し、実行していただければおわかりになるかと思います。
なお、方法はアックン作の転置書きだしを最終行に読み込んでるだけです。


注意:&追加test=** テストの結果はもっと大きな数値でも行えますが
最初は小さな数字で様子を見てください。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

変数宣言 数値{&i,&追加test}
変数宣言 文字列{&表名TBL,&定義K3}
&追加test=10

&表名TBL="追加test.TBL",&定義K3="追加test.K3"

ケース開始
  ケース(#ファイルサイズ(&表名TBL)>0)
    メッセージボックス "新規作成","一覧表『 "+&表名TBL+" 』が、存在します。
\nいったん削除後、新規作成していいですか?",アイコン=?,ボタン指定=2,&実行リターン
    条件 (&実行リターン<>1) 終了
    ファイル削除 &表名TBL
ケース終了

印字開始 &定義K3
  印字 """項目名"",""文字列"",""C800"""
印字終了 改頁=しない
表作成 &表名TBL,定義ファイル=&定義K3
ファイル削除 &定義K3

繰り返し &i=1,&追加test
  項目属性変更2 追加,{#文字列(&i,4),"数値",C800}
  if(&i<>1)
    &STR = "置換 ["+#文字列(&i,4)+"] = ["+#文字列(&i-1,4)+"]+2"
    コマンド &STR
  end

  &STR="書き出し 転置,""作業$$$$.tbl"",データ型=数値,{[項目名],["+#文字列(&i,4)+"]}"
  コマンド &STR
  ジャンプ 行番号=終端
  読み込み 表,"作業$$$$.tbl"
  ジャンプ 行番号=最終
  &STR="行訂正 ["+#文字列(&i,4)+"] = 0"
  コマンド &STR
  繰り返し終了
  表形式編集
  終了 表 編集対象表
終了
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

また、一気に作成するのではなく、項目の追加と計算は会話処理で終了していて
少しずつ、最終行に追加するだけでしたら追加用の一括を作成しておけばいいでしょう。


>&STR="書き出し 転置,""作業$$$$.tbl"",データ型=数値,{[項目名],["+#文字列(&i,4)+"]}"
>コマンド &STR
>ジャンプ 行番号=終端
>読み込み 表,"作業$$$$.tbl"
>ジャンプ 行番号=最終
>&STR="行訂正 ["+#文字列(&i,4)+"] = 0"
>コマンド &STR

これを少し変更した物を作成しておけばいいでしょう。


13886 Re:複数項目を一度に置換したい 【多遊】 2001/11/06-23:51
記事番号13885へのコメント
ちょっとあいそなかったので、追加です。

&STR="書き出し 転置,""作業$$$$.tbl"",データ型=数値,{[項目名],["+#項目属性(#項目数,1)+"]}"
コマンド &STR
ジャンプ 行番号=終端
読み込み 表,"作業$$$$.tbl"
ジャンプ 行番号=最終
&STR="行訂正 ["+#項目属性(#項目数,1)+"] = 0"
コマンド &STR
ファイル削除 "作業$$$$.tbl"

こんな感じでしょう。では
13888 やってみます oya 2001/11/07-10:58
記事番号13886へのコメント
ちょっと難しそうですが、一度やってみます。
ありがとうございました。

13889 Re:やってみます 今村 誠 2001/11/07-13:07
記事番号13888へのコメント
oyaさんこんにちは、【多遊】さんとアックンさんのヒントを元に下記の
一括を書いてみました。
駅名をキー入力で追加してその行の運賃を縦や置換で計算すると横に複写します。
訂正キーで下方向に訂正するので便利かなと思ったりします。
途中で休憩するときは駅名でescを押すと続きができます。
せっかく書いたので試してみてください。
改行がでたらめですが時間がないのでご勘弁を。

変数宣言 固有,文字列{&item,&項目名,&項目1,&印字項目,&Q,&C,&QCQ},固有,数値{&終了,&増分,&中止,&項目数,&c}
       &Q=#JIS(34),&C=#JIS(44),&QCQ=#JIS(34)+#JIS(44)+#JIS(34)
* 駅名は新横浜と横浜など同じ文字があると困るのでチェックしません
表 "時刻表",モード=専有,リトライ=しない,終了状態=&終了
メッセージボックス "時刻表の作成と修正","新規入力 はい 追加修正 いい
え 中止 キャンセル",\
アイコン=?,ボタン指定=4,制御文字展開=する,&終了
条件 (&終了<6) return
条件 (&終了=6) 行削除 *,圧縮 
  代入 &c=1,&項目名=#cat("[",#項目属性(&c,1),"]"),&項目1=#項目属性
(&c,1),&中止=1,&項目数=#項目数
&item=#cat("最終項目 ",#項目属性(&項目数,1),"に追加する駅
名を入力してください。")
繰り返し (&中止>0)
   キー入力 (23, 1),プロンプト=&item,モード=全角,パネル使用=禁止,終了
状態=&終了,&item
    条件 (&終了=0) 繰り返し中止
   項目属性変更2 追加,{&item,数値,5,,}
   表形式編集 カーソル=↓,画面消去=しない,更新=許可,許可作業=*,\
ガイド="運賃を縦方向に入力してください",初期項目=&item,終了状態=&
終了
    &項目数=&項目数+1,&印字項目=#cat(&項目名,",[",&item,"]"),\
&STR="書き出し 転置,""作業$$$$.tbl"",データ型=数値,{"+&印字項目
+"}"
コマンド &STR
表 "作業$$$$.tbl",モード=専有,終了状態=&終了
   項目属性変更2 削除,&項目1
書き出し K3,"作業",項目名=しない,終了状態=&終了,*
   終了 表 編集対象表
   ジャンプ 行番号=終端
  読み込み K3,"作業",項目名=する,終了状態=&終了,*
    行訂正 終了状態=&終了,&item=0 
    表形式編集
&item=#cat("最終項目 ",&item,"に追加する駅名を入力してくだ
さい。")
  繰り返し終了
  終了


13893 できました。ありがとうございました oya 2001/11/07-18:15
記事番号13883へのコメント
アックンさん、【多遊】さん、今村さんありがとうございました。

アックン
>書き出し条件登録 転置,条件名="書出転置01",
>"ナントカ_転置書出.tbl",ファイル名変更=しない,データ型=数値,{[A],[11]}
>
>書き出し 転置,条件名="書出転置01"
>

【多遊】
>あっくんから、お答えが書いてありますが、項目が(1000項目×1000くらい)
>と書いてありましたので、
> >{[A][A],[1][1],[2][2],[3][3],[4][4],[5][5]・・・・・・・・
> 方式は作るのも大変かと思いテストプログラムを作成してみました。

結局アックンさんの前半部分使わせていただきました。
後半部分の書出表の読込部分ですが、
1000×1000の元表があること、
実際の数値はアトランダムであること、
追加のデータが今回は6件だけであることなどから、
手動で対処しました。

読込条件登録で、読込項目を >>(A) で一発クリア!!
ちょっと変則技ですが。

次回からは一括処理の中でこの読込条件を指定してやればOKだと思います。


戻る