過去の桐井戸端BBS (桐ver.9)
25139 番号入りの文章が入った項目をその番号毎に分割して別の項目へ入れたい 玉太郎 2004/02/26-19:33
玉太郎です。
はじめまして
よろしくお願いいたします。

[文章][1][2][3][4][5]
以上の項目があります。

[文章]の項目は
1:あいうえお2:かきくけこ3:さしすせそ4:たちつてと5:なにぬねの

このような番号入りの文章がはいっています。
この文章の「1:あいうえお」を[1]の項目に
「2:かきくけこ」を[2]の項目に
それぞれ番号の項目へ分割したいのですが
できるでしょうか

よろしくお願いいたします。

<玉太郎>


25143 この例が意味するものは? 宮城 2004/02/26-21:10
記事番号25139へのコメント
玉太郎さん、もう少し説明願います。

解釈1
1文字目から7文字を[1]に、8文字目から7文字を[2]に・・・と[5]まで
分割して格納していく。(こんな簡単なわけはないでしょうね。(^_^;;

解釈2
全角数字と全角コロンをセパレーターとしてそこまでを全角数字と一致する項目に格納していく。
項目名である以上有限個だと思いますが、その上限値は?
文章中のセパレータは必ず連番で欠番はないのでしょうね?

もっといろんなこと考える人がいるかもしれませんよ。

25144 項目計算式でできそうです。 佐田 守弘 2004/02/26-21:10
記事番号25139へのコメント
玉太郎さん

[1]には、
 #計算(#代入(&秒,#文字位置([文章],"2:"))
    ,#部分列([文章],3,&秒-1))
[2]には、
 #計算(#代入(&分,#文字位置([文章],"2:"))
    ,#代入(&秒,#文字位置([文章],"3:"))
    ,#部分列([文章],&分+2,&秒-1))
以下、[3]〜[5]は、[2]に準じた式

これらを項目計算式に設定してみて下さい。
これらの式の意味を簡単に言えば、[文章]の文字列から、"2:"や"3:"などの文字位置を求め、
それらの間の文字列を取り出します。

佐田守弘(KS-00119)

25145 別案 悲しげ 2004/02/26-21:13
記事番号25139へのコメント
どもっ、玉五郎さん
#s([文章],":",",")
とすると、データは

1,あいうえお2,かきくけこ3,さしすせそ4,たちつてと5,なにぬねの

となる筈なので、こうすると#対応文字列関数で取り出し易くなりますから

項目[1]は
#文字列反転(#sstr(#文字列反転(#対応文字列(#s([文章],":",","),2)),2))
項目[2]は
#文字列反転(#sstr(#文字列反転(#対応文字列(#s([文章],":",","),3)),2))
項目[3]は
#文字列反転(#sstr(#文字列反転(#対応文字列(#s([文章],":",","),4)),2))
項目[4]は
#文字列反転(#sstr(#文字列反転(#対応文字列(#s([文章],":",","),5)),2))
項目[5]は
#対応文字列(#s([文章],":",","),6)

25147 目的は... 佐田 守弘 2004/02/26-21:19
記事番号25139へのコメント
玉太郎さん
一体何のためにこの様な処理をするのか、私も不思議なのですが、
1つだけ思い当たるものがありました。
事によって、特許DBとかその他の商用DBで検索した結果を桐の表に落したいという事ではないのでしょうか。

この種の情報は、大体が先頭に番号がついていますね。

さて、その前提の話なのですが。
落したデータは、
>1:あいうえお2:かきくけこ3:さしすせそ4:たちつてと5:なにぬねの
の様にはつながってなくて、
 1:あいうえお
 2:かきくけこ
 3:さしすせそ
 4:たちつてと
 5:なにぬねの
の様にデータ毎に改行されていると思いますが。

私がこの手のデータを扱う場合、一度そのまま表に読み込むか、あるいは
テキストファイルから直接1行ずつ読み込みながら、先頭の識別子が何であるかを判断し、
その都度それぞれの項目に振分けて行きます。
そして、レコード区切りに相当する記号がどこかにあるはずなので、
これを使って、新規の行を追加するなどの処理をしています。

佐田守弘(KS-00119)
25156 Re:目的は... 玉太郎 2004/02/26-23:01
記事番号25147へのコメント
佐田 守弘さん、宮城さん、悲しげさん、ご指導ありがとうございます。
大変説明不足で申し訳ありません。
実際の内容は下のとおりです。

メールで商品のオーダーが届きます。
届いたメールの内容は

1:桐下太郎 -->氏名です。
2:高知市朝倉丙123 -->住所です。
3:0***-**-**** -->電話番号です。
4:きゅうり 2個 -->商品名+数量です。
5:にんじん 3個
6:だいこん 4個

このデータを、桐V9-2004を使ってますので
メールを桐で受信し、桐の受信ログの[文章]に取り込みます。
この[文章]の内容をそれぞれの項目に分割したいのです。

1:-->[氏名]
2:-->[住所]
3:-->[TEL]
4:-->[商品]

といった内容です。

よろしくお願いいたします。

25176 Re:目的は... 佐田 守弘 2004/02/28-21:38
記事番号25156へのコメント
玉太郎さん
この種の処理は、実データに合せて作る必要があります。
ここではあくまでも参考までに、一括処理の考え方とスタイルを示します。

●前提として
前提として、読み込みたいデータがテキストファイル"mail.txt"に書かれていると仮定します。

前回も言いましたが、このテキストファイルを直接読み込む方法と、
一度読み込み用の表に読み込んでから、項目毎に分割する方法とがあります。
後者の方が、生のテキストファイルが表になっているので、
これを確認する事ができるので、解りやすいと思います。
読み込み用の表は、仮に"読込.tbl"とし、項目は文字列型の[TXT]を1つ作ります。
そしてここにテキストファイル読込で、メールのテキストファイル
"mail.txt"を読み込んでおきます。この部分は一括でも可能ですが、
解りやすい様に会話処理で行っておいて下さい。

●項目毎に分割する
上記の読込.tblをメール.tblの項目に分割する一括処理です。
=========================================
変数宣言 文字列{&TXT,&氏名,&住所,&電話,&商品1,&商品2,&商品3}
変数宣言 整数{&番号}
表 "読込.tbl",表番号=1
表 "メール.tbl",表番号2
編集表 1
繰り返し (.not #終端行)
 代入 &TXT=[TXT],&番号=#数値(#部分列(&TXT,1,1))
 ケース開始
  ケース (&番号=1)
   代入 &氏名=#部分列(&TXT,2)
  ケース (&番号=2)
   代入 &住所=#部分列(&TXT,2)
   ・・・(以下、&番号=5まで同様)
  ケース (&番号=6)
   代入 &商品2=#部分列(&TXT,2)
   編集表 2
   行追加 [氏名]=&氏名,[住所]=&住所,・・・・・・[商品2]=&商品2
   編集表 1
 ケース終了
繰り返し終了
終了 表
=========================================
類似の部分は省略しておりますが、上記のような形の一括処理を作成すれば
読み込めるはずです。

●補足:元のデータがメールとの事なので
どうやら元のデータはメールの様ですね。
メールの場合、メーラーによって異なる書式の専用ファイルですから、
一般的には、直接桐に読む事は難しいかと思います。
メールの文面をテキストファイルに書き出す部分をどうするかが課題かも知れませんね。
これは使っているメーラに合せて考えて頂く必要があるかと思います。

佐田守弘(KS-00119)
25181 Re:本件とは違いますが HERB 2004/02/29-11:27
記事番号25176へのコメント
佐田 守弘さんHERBです

本件とは違いますがアンケート集計データを桐に取込加工しました。

>前回も言いましたが、このテキストファイルを直接読み込む方法と、
>一度読み込み用の表に読み込んでから、項目毎に分割する方法とが
>あります。

設問番号、解答がカンマ区切りのテキストデータで1回答者の先頭行と最終行には
必ず同じデータが回答項目にあり、回答者約千名強のデータが縦に保存されていました。

設問数は20弱で、回答者によっては解答していない場合もあり1回答者分の解答が全て同数行とは限りませんでした。

ケース開始コマンドと繰り返しコマンドでどうにか横並びの表は作成できましたが、
果たして正確に展開できたのか怪しいです。

コメントを読んで思わず投稿してしまいました。

戻る