過去の桐井戸端BBS (桐ver.8)
10058 一組のデータが複数行になっている場合で直前行のデータを反映したい 工藤 2001/03/06-17:23
一括処理を使って以下のような処理が出来ないか、お知恵を貸してください。
50行程度が一組のデータで、"ID="から始まるデータが2行存在します。
最初に出てくる"ID="には"ID=BN****"のようにデータが入力されているのですが、
後ろに出てくるデータには"BN****"が反映されていないので「"ID="を先頭一致で絞込み」までは考えたのですが、
その後の処理をどうやればいいのか考えつきません。
ちなみにこの段階は以下のような状況です

 ID=BN12345
 ID=     ここにデータ "BN12345" を反映したい
 ID=BN67890
 ID=

変数を使うとか、直前値とかあるのでしょうか?
どんな方法でも良いのでどうか宜しくお願いします。

10059 Re:一括処理で直前行のデータ反映 toshi-chan 2001/03/06-18:29
記事番号10058へのコメント
工藤さん、こんにちは。


> ID=BN12345
> ID=     ここにデータ "BN12345" を反映したい

「"ID="から始まるデータが2行存在します」とのことですから、ID以外の項目にはデータが入力されているわけですね

とりあえずの案です。
"ID="から始まる項目を[ID]とします。項目を1つ追加しましょう。
項目名は[IDの直前値]としておきます。
ここに項目計算式を設定します。式は
#直前値([ID], "")
とします。
そして、[IDの直前値]に対して置換を実行し、データの再計算をします。
その後、値を入力したい1行のみを絞り込みます。
ここで[ID]を[IDの直前値]で置換します。

こんなのでいかがでしょうか。
10060 Re:一括処理で直前行のデータ反映 宮城 2001/03/06-18:54
記事番号10058へのコメント
工藤さん、こんにちは。たった2行なら「訂正」→「直前値」で済んでしまいますけど。(^^;;

並びにはくれぐれもご注意下さい。
入力順になってる前提でしょうが、それを保証するために連番用項目を追加し入力順の並び順を確保しておくべきです。

この項目が全レコード「ID=」から始まるのかどうかはっきりしませんが、そうなっている前提とします。

変数宣言や並べ替え部は省略。

&複写文字=""
ジャンプ 行番号=先頭
繰り返し (.NOT #終端行)
 ケース開始
  ケース([狙いの項目]<>"ID=")
   &複写文字=[狙いの項目]
   ジャンプ 行番号=次行
   行訂正 [狙いの項目]=&複写文字
   &複写文字=""
 ケース終了
 ジャンプ 行番号=次行
繰り返し終了


10061 Re:一括処理で直前行のデータ反映 宮城 2001/03/06-19:07
記事番号10060へのコメント
>この項目が全レコード「ID=」から始まるのかどうかはっきりしませんが、そうなっている前
>提とします。

ひょっとして、「ID=」の次に値をもっているもの・「ID=」だけのもの・そうでないものの3パターンだった場合、
あの前で「ID=」先頭一致で絞り込んでおきます。

「ID=」の次に値をもっている行の次は必ず「ID=」だけの前提ですが。

10063 Re:一括処理で直前行のデータ反映 mudagami 2001/03/06-21:56
記事番号10058へのコメント
> ID=BN12345
> ID=     ここにデータ "BN12345" を反映したい
> ID=BN67890
> ID=
>
>変数を使うとか、直前値とかあるのでしょうか?
>どんな方法でも良いのでどうか宜しくお願いします。
>

ID= だけの行は以下同様とでもいう意味でしょうか?
項目置換に以下の式を入れることで実現できるのではないでしょうか?

#条件選択([]="ID=",#直前値([],[]),1,[])
10064 Re:一括処理で直前行のデータ反映 toshi-chan 2001/03/06-23:07
記事番号10063へのコメント
そうですね。
これが簡単ですね。ややこしい提案をしてすみません。(*^_^*)
10068 Re:一括処理で直前行のデータ反映 工藤 2001/03/07-10:54
記事番号10061へのコメント
回答、どうもありがとうございました。おかげさまで、意図したとおりの処理を行えました。

遅ればせながら問題のデータの構成についてお話します。

作業対象のデータは、ある一般公開されているデータベースで、通常思い浮かべる、
1レコード、1件分のデータという構成ではなく、"/BOOK" から始まる複数レコード(約50行程度)の、"EOR" までが
1件分のデータ、という構成のテキストデータです。

/BOOK
_DBNAME_=BOOK
ID=BA49067043
CRTDT=20001115
YEAR1=1948
</YEAR>
CNTRY=ja
TTLL=jpn
TXTL=jpn
ORGL=fre

上記のようなデータが延々と並んでいるわけです。
問題になっていた "ID=" から始まる行ですが、1件のデータ中に2行必ず存在しています。
このデータベース、「後ろに出てくる "ID" はデータはブランク」という仕様なのですが、
あるアプリケーションでは「"ID" には必ず同じデータが入っていないと取り込み不可」という仕様になっていたため、
「項目数 = 1 の TBL ファイルに読込み、"ID=" を先頭一致で絞込み、その後直前値か何かで処理できると楽かな?」
と、ここまで考えたのですが、そこから先が良くわからなかったわけです。

ちょっと支離滅裂な文章だと思いますが、通じたでしょうか?
とにかく皆さんには感謝です。ほんとにありがとうございました。

10071 Re:一括処理で直前行のデータ反映 工藤 2001/03/07-13:02
記事番号10063へのコメント
>ID= だけの行は以下同様とでもいう意味でしょうか?

そのとおりです。


>項目置換に以下の式を入れることで実現できるのではないでしょうか?
>#条件選択([]="ID=",#直前値([],[]),1,[])


一括処理の中に含むならば、先頭一致で絞り込んだ後、

置換 [data]=#条件選択([data]="ID=",#直前値([data],[data]),1,[data])

とすれば良いわけですよね。
簡単に出来るものですね。ありがとうございました。

今回のデータに関する詳細(?)を宮城さんからの回答の下につけています。
自分で書いておいてなんですが、文章が支離滅裂でわかりにくいとは思いますが、
気が向いたら見てみてください。
ほんとうに、ありがとうございました。

戻る