過去の桐井戸端BBS (桐ver.8)
17508 特定の文字コードを含むデータをチェック(絞り込み)したい まもる 2002/10/10-17:49
初めて質問させて頂きます。使用しているのはver8SP6です。
桐で作成したデータの中で、特定の文字コードを持つ文字をチェックする方法を教えて頂きたいのです。
右クリックで文字コードを表示させる方法は知っておりますが、
取り扱うデータの文字数が膨大なため、検索処理をかけて、結果合致した文字コードの文字が
存在するデータ行のみ表示される・・・みたいなものが希望なのですが、どうしたらよいでしょうか?

具体的には

1)JIS 2121〜2840
2)JIS 3021〜4F53
3)JIS 5021〜7424

以外の文字コードの文字が存在するデータ行のみを表示させる、というものです。

説明が稚拙で恐縮ですが、よろしくお願い致します。

17516 Re:特定の文字コードをチェックしたい 佐田 守弘 2002/10/11-00:31
記事番号17508へのコメント
まもるさん
1)検査する文字の一覧表を作る
対象となる文字の一覧表を作って下さい。これはそれ程難しくありません。
[連番][HEX][文字]の2項目を作り、
[連番]には、#直前値([],1)
[HEX]には、#HEX([連番])
[文字]には、#JIS([連番])
を項目計算式で設定し、単に行追加をすれば、文字の一覧表ができます。
この中から対象外の文字範囲を削除してでき上がりです。

2)チェック用の項目を作る
[選]の項目を追加して下さい。

3)一括
以下の様な一括を作ります。
(動作は未確認です。)
===============================================
表 "データ.tbl"
置換 [選]=0
表 "文字.tbl"
編集表 データ
繰り返し (.not #終端行)
 編集表 文字
 繰り返し (.not #終端行)
  代入 &文字=[文字]
  編集表 データ
  条件 (#文字位置([検索項目]),&文字)>0) 行訂正 [選]=1
  編集表 文字
 繰り返し終了
 編集表 データ
繰り返し終了
絞り込み [選]{=1}
================================================

4)追加
文字表を作らずに、検査する文字コード範囲で繰り返しコマンドを使っても構いません。
その方が多少時間が速いかも知れませんが、一括は多少複雑になります。
いずれにしてもかなり時間を要する処理になると思います。

佐田守弘(KS-00119)


17521 Re:特定の文字コードをチェックしたい まもる 2002/10/11-08:53
記事番号17508へのコメント
佐田 守弘様、早々にご教授ありがとうございます。
今から着手してみます。
また分からないことが出てきたら、ぜひ教えて下さい。
ありがとうございます。

17524 佐田 守弘様へ まもる 2002/10/11-10:51
記事番号17508へのコメント
お恥ずかしい話ですが、1)検査する文字の一覧表を作る、のところでつまずいてしまいました。
申し訳ございませんが、ご指導をお願い致します。

項目名 データ型 表示幅 被ふりがな項目名 項目計算式
連番  文字列   M3334             #直前値([],1)
HEX   文字列  M3334             #HEX([連番])
文字   文字列  M3334             #JIS([連番])

という表定義をして、閉じようとすると、

KD1620:式の結果が代入または変換できないデータ型です
#HEX([連番])

というメッセージが出てしまうのです。
どうしたらよろしいでしょうか?
お忙しいところ恐縮ですがなにとぞよろしくお願い致します。


17537 Re:特定の文字コードをチェックしたい natsu 2002/10/12-00:16
記事番号17516へのコメント
>文字表を作らずに、検査する文字コード範囲で繰り返しコマンドを....

すでに開いている表に[チェック]という項目を追加し、
条件に合致する文字があれば
その項目に"表示"と入力する一括処理です
全行・全項目調べますが、該当の文字があった時点で次行にジャンプします

検査したい表の一覧が、テーブルになっていれば、
それらも繰り返し処理の追加で自動的に実行できるはずです


***********************************
項目属性変更  追加,{ "チェック",文字列 }
ジャンプ 行番号=先頭
繰り返し (.not #終端行 )
 繰り返し &昭和年=1,#項目数-1
  条件 ( [チェック]="表示" ) 繰り返し中止
  ケース開始
   ケース (#項目属性( &昭和年 , 2 )="文字列")
       &STR=#項目属性( &昭和年 , 0 )
        繰り返し
         &実行リターン=#JIS(&STR)
         ケース開始
          ケース (&STR=#U)
          繰り返し中止
          ケース (&実行リターン<8481)
* 評価したい文字コード(JISコードの十進数)の条件式です
          &STR=#U
          ケース (10304<&実行リターン .and &実行リターン
<12321)
          &STR=#U
          ケース (20307<&実行リターン .and &実行リターン
<20513)
          &STR=#U
          ケース (29732<&実行リターン)
          &STR=#U
          ケース その他
         ケース終了
         条件 ( &STR=#U ) 行訂正 [チェック]="表示"
         &STR=#SSTR(&STR,2)
         条件 ( &STR=#U ) 繰り返し中止
        繰り返し終了
   ケース その他
  ケース終了
 繰り返し終了
ジャンプ 行番号=次行
繰り返し終了
***********************************

17539 Re:特定の文字コードをチェックしたい まもる 2002/10/12-00:50
記事番号17537へのコメント
natsu様、ご教授ありがとうございます。
会社が月曜日まで休みなので、火曜日に早速試してみます。
桐で作ったデータをテキストに落として、ある取引先に定期的に収めているのですが、
「文字化けするので対応して欲しい」と言われて、この掲示板におすがり致しました。
本当にありがとうございます。
不明な点が出たら、また質問させて下さい。よろしくお願いいたします。
17549 データ型を確認して下さい 佐田 守弘 2002/10/12-23:31
記事番号17524へのコメント
まもるさん
エラーになったのは、[連番]の項目を文字列型に設定しているためです。
ここには連番号の整数値を設定するので、長整数型に設定して下さい。

なお、前回の書き込みに一部訂正があります。
[連番](長整数型)に設定する項目計算式は、#直前値([],0)+1
でした。

佐田守弘(KS-00119)
17594 natsu様 まもる 2002/10/15-14:10
記事番号17539へのコメント
natsu様

ご教授頂いたとおりに記述したうえ、実行したところ、問題なく動作したのですが・・・
実はヒット数が予想以上に多かったため、さらにお願いしたいことがございます。

該当の文字だけ字の色を変える
該当の文字だけチェック欄に表示させる

みたいな事は可能でしょうか?
厚かましいお願いですが、さらにご指導下さい。

17597 少々お待ち下さい natsu 2002/10/15-15:51
記事番号17594へのコメント
今回の一括処理は、ある行で項目値を順番に評価して
該当の文字が出てきたらチェックを入れるものです

というわけで、行中に該当文字があればそこで
その行の評価を中断して次の行へジャンプします

それから、過去ログにもあったと思うのですが
桐では、ひとつの項目値の中で、特定の文字のフォントのみを
変更できなかったと思います

というわけで、
それをやろうとおもったら、若干の一括の手直しと
データを印字コマンドでHTML化して、該当文字にタグをつけ
色つきにするという事になります
データの確認は、IE等のブラウザ上で行うかHTMLをエクセルあたりに
取り込む事になります(桐9ではどうなんでしょうか)

時間がとれれば、また書き込んでおきます

それから・・・ 「様」が付くほどの者ではございませんのでよろしく
17598 佐田様 まもる 2002/10/15-15:58
記事番号17549へのコメント
ご指導頂いた内容にて、文字表は完成できました。ありがとうございます。
---------------------------------------------------------------
表 "データ.tbl"
置換 [選]=0
表 "文字.tbl"
編集表 データ
繰り返し (.not #終端行)
 編集表 文字
 繰り返し (.not #終端行)
  代入 &文字=[文字]
  編集表 データ
  条件 (#文字位置([検索項目]),&文字)>0) 行訂正 [選]=1
  編集表 文字
 繰り返し終了
 編集表 データ
繰り返し終了
絞り込み [選]{=1}
----------------------------------------------------------------
という記述にて早速実行してみたのですが
----------------------------------------------------------------
一括処理の実行中にエラーが発生しました
KU1090:コマンドの形式に誤りがあります
詳細 >0) 行訂正 [選]=1
ファイル名 ***.cmd(←当方で作成したファイル名です)
行番号 10
-----------------------------------------------------------------
というメッセージが表示されてしまうのです。
データ.tblには 選 の項目はちゃんと追加しているのですが、どうしてなのでしょうか?
私の操作ミスか記述ミスによるものかと思うのですが、添削方々ご指導をお願い致します。
なにとぞよろしくお願い致します。

17608 Re:少々お待ち下さい natsu 2002/10/15-18:18
記事番号17597へのコメント
表データを始めからHTML化できますが
一覧表印刷でHTML書き出しとすれば手間いらずです
(よけいな時間はかかりますが)
ただし、1行あたり4000文字の制限はあります
必要な項目のみ選択しましょう

まず、一覧表印刷の設定を行っておきます(条件名を"HTML"としておきます)
つづいて、該当文字を含む行は既に絞り込まれているとして
一覧表印刷→HTML化を行います
項目がひとつの表をあらかじめ用意し("_読込.tbl" [読込]:文字列型)
その表に、HTML化した表をテキスト読み込みます

その表を1行、1文字ずつ評価して行きます
最後に全レコードをテキスト書き出しして、拡張子をHTMに変更します

*************************************
*既に表は開いており、該当文字を絞り込んでいる状態からスタートします
*必ずしも表を絞り込んでおく必要はありませんが、スピードアップは可能です

一覧表印刷 条件名 = "HTML",HTMLファイル名 = "HTML.htm"
表 "_読込.tbl"
書き出し 枠組み,"読込.tbl"  /* 行削除・圧縮より少しは速いかもしれませ
ん */
表 "読込.tbl"
読み込み テキスト,"HTML.htm",区切り = "♪"  /*データに絶対存在しない
文字を区切りとします*/
ジャンプ 行番号=先頭

&比較式="<FONT COLOR=""red"">"  /* 該当の文字を赤くするタグです */
&置換式="</FONT>"

繰り返し (.not #終端行)
   &昭和年=1
   &選択ファイル名=#U
   &STR=[読込]
   繰り返し 
     &実行リターン=#JIS(#SSTR(&STR,&昭和年))
     ケース開始
          ケース (10304<&実行リターン .and &実行リターン
<12321)
              &選択ファイル名=&選択ファイル名 + &比較式 + #JIS(&実行リターン) + &置換式
          ケース (20307<&実行リターン .and &実行リターン
<20513)
              &選択ファイル名=&選択ファイル名 + &比較式 + #JIS(&実行リターン) + &置換式
          ケース (29732<&実行リターン)
              &選択ファイル名=&選択ファイル名 + &比較式 + #JIS(&実行リターン) + &置換式
          ケース その他
              &選択ファイル名=&選択ファイル名+#JIS(&実行リターン)
     ケース終了
   &昭和年=&昭和年+1
   条件 ( #SSTR(&STR,&昭和年)=#U ) 繰り返し中止
   繰り返し終了
   行訂正 [読込]=&選択ファイル名
ジャンプ 行番号=次行
繰り返し終了
書き出し テキスト,"check.htm"
*同じフォルダに check.htm が作成されているはずです 確認して下さい

戻る