HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

《 桐質問以外の話題は、「のほか掲示板」からどうぞ 》
■ 24時間以内に作成されたスレッドは New で表示されます。
■ 24時間以内に更新されたスレッドは UpDate で表示されます。

記事リスト ( )内の数字はレス数
Nomal加工開始日を求めたい(32) | Nomal更新を判定出来ますか?(30) | Nomal『KU1109:ファイル名の形式が不正です』(23) | Nomalフォームの式入力で[名前]と背景色を指定できますか(22) | Nomalフォームのコマンドボタンについて(18) | Nomal行制約について(17) | Nomal変数を反映させたい(16) | Nomal[英単語] を単語単位で検索・絞込する方法(15) | Nomal表番号の謎(15) | Nomalレポートの列集計(件数集計)について(15) | Nomalクリックスライド入力(15) | Nomal(削除)(13) | Nomal超初心者ですみませんが・・・・(12) | Nomalレポートのヘッダーとフッターの日付が異なる(12) | Nomalアポストロフィ、シングルクォーテーションの「'」(8) | Nomalインボイス対応請求書レポート作成(8) | Nomal右クリックフォーム(8) | Nomalエクセル書き出し(7) | Nomalデータ内の指定文字列個数を知りたい(7) | Nomal値集合の番号とは(7) | Nomalフォーム入力途中でESC(6) | Nomal文字置換(5) | Nomalレポート印刷(5) | Nomal環境依存文字(5) | Nomalテキスト読み込み(5) | Nomal数値の直前値がおかしくなります(5) | Nomal文字、記号、数字が混在したランダムなパスワードを作る方法(5) | Nomal(削除)(4) | Nomalエクセル1900基準にしたい(4) | Nomal文字列への入力方法(4) | Nomal字種制約違反について(4) | Nomalタイルを2つ(3) | Nomal桐レポート若しくは一覧表印刷で作成可能かどうか(3) | Nomal時間型の置換(3) | NomalNumLockキー 処理中止にしたい(3) | Nomalレポートで明細末尾に以下余白と表示させたいです(2) | Nomal桐レポートCond関数で(2) | Nomal特定箇所の計算(2) | NomalDBの接続に失敗しました(2) | Nomal条件選択だと思うんですが…(2) | Nomalレポート オブジェクトの属性(2) | Nomal毎月2日から翌月1日までを1ヶ月(2日の日の属する月)とする行集計の方法について(2) | Nomal対象表が更新中またはグループ操作中のためこのコマンドは使用できません(2) | Nomal桐の履歴(2) | Nomal∨ や ∧ の変換(2) | Nomal書き出しコマンドについて(2) | Nomal文字の置き換え(2) | Nomalレポート 表ファイル名の選択(2) | Nomalexcelのexactの代わりになる関数(2) | Nomal一覧表での改行(2) | Nomal一覧表(tbx)を開いた状態での複合レポート(1) | Nomal会話で開かれていない為継承できません(1) | Nomal桐RDSで固まる(1) | Nomal(削除)(1) | Nomal右クリックフォーム(1) | Nomalcmd実行中の左下表示(1) | Nomalxmlファイル読み込みについて(1) | Nomal単純な項目の計(1) | Nomal伝票印刷において(1) | Nomal(削除)(0) |



■記事リスト / ▼下のスレッド
■14080 / 親記事)  フォーム入力途中でESC
□投稿者/ 篤姫 -(2023/12/21(Thu) 13:01:41)
    桐10S Windows10

    フォームで入力途中にESCで入力を中止した時に
    指定のコマンドボタンにフォーカスを移動させたいのですが

    よろしくお願いします。
引用返信 [メール受信/OFF]

▽[全レス6件(ResNo.2-6 表示)]
■14082 / ResNo.2)  Re[1]: フォーム入力途中でESC
□投稿者/ ONnoji -(2023/12/21(Thu) 20:31:27)
    2023/12/22(Fri) 14:42:16 編集(投稿者)
    2023/12/22(Fri) 10:35:04 編集(投稿者)
    2023/12/21(Thu) 21:26:43 編集(投稿者)

    > 桐10S Windows10
    >
    > フォームで入力途中にESCで入力を中止した時に
    > 指定のコマンドボタンにフォーカスを移動させたいのですが

    フォームのテキストボックスにキャレットがある時には、[テキストボックスのエディタ]の中に居ます。

    この[テキストボックスのエディタ]とはいわゆる入力用のバッファ(メモリ)の事です。
      ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    なので、[テキストボックスのエディタ]に進入している時に発生する[入力後]イベントで他のオブジェクトへフォーカスを移動することは禁止されています。

    つまり、[入力後]イベントが終了してから、他のオブジェクトへフォーカスを移動させてちょうだいね、ということです。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
     ◇ ◇ ◇ ◇

    私も[実行コマンド:ESCキー]が簡便で面倒くさくないのでお勧めします。
      ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    ただし、テキストボックスにキャレットがある時には、ESCキーを2度押す必要がありますね。

    1度めは、[テキストボックスのエディタ]から脱出するために、

    そして2度めは、[実行コマンド:ESCキー]の設定のために。

    これ位ならば、普通は[この仕様で良し!]じゃないでしょうか????

     ◇ ◇ ◇ ◇

    それでも、どうしてもというのであればサンプルを添付しますので参考にしてください。

    例によってサンプルは数日を目途に削除しますのでダウンロードはお早めに願います。

    なお、サンプルでは時限式タイマーを使用しています。

    時限式タイマーに関しては拙作webページを参考にしてください。

    こちら
     ↓
    桐の釣魚大全のトップ > フォームアプリケーション教書 第1部
    11 [タイマー]イベントの動的セット
    http://silicon7565.html.xdomain.jp/guide/guide_Part1.htm#section11


    ■ダイアログボックス.WFX

     フォーム
     ├ ファミリ
     ├ ワークスペース
     │ └ cmdフォーカス移動
     ├ フォーム操作バー
     ├ フォームヘッダ部
     │ └ tタイトル
     ├ フォーム明細部
     │ ├ テキスト_8
     │ │ └ ラベル_9
     │ ├ テキスト_9
     │ │ └ ラベル_10
     │ └ ラベル_11
     └ フォームフッタ部
       ├ cmdOK
       └ cmdキャンセル

     オブジェクト名: cmdフォーカス移動
     標題     : cmdフォーカス移動

      機能名     機能パラメータリスト
     1 フォーカス移動  "cmdキャンセル"
     2 なし
     3 なし
     4 なし


    ■ダイアログボックス.kex

    名札  メイン



    手続き定義開始 フォーム::タイマー1()
     変数宣言 自動,文字列{ &objectName }
     変数宣言 自動,整数 { &return }

     &objectName = "フォーム"
     オブジェクト操作 &objectName{タイマー1 = 0 } /* 時限式タイマーなので直ちに停止します */

     メソッド呼び出し 戻り値 = &return, @cmdキャンセル.フォーカス設定()
     **戻り値 意味
     ** 1 フォーカスを移した。
     ** 0 フォーカスを移せなかった。
     **-1 フォーカス設定できないハンドラ内で実行した
     トレース出力 _&return

    手続き定義終了

    手続き定義開始 テキスト_9::入力後(参照 文字列 &編集文字列,長整数 &モード,参照 長整数 &入力継続)
     変数宣言 自動,文字列{ &objectName }
     変数宣言 自動,整数 { &interval = 10 } /* 単位は1/100秒 ただし、0.1秒以下にはしないこと */
     変数宣言 自動,整数 { &return }

     トレース出力 &this
     if ( .not &モード )

      メソッド呼び出し 戻り値 = &return, @cmdキャンセル.フォーカス設定() /* NG!です */
      **戻り値 意味
      ** 1 フォーカスを移した。
      ** 0 フォーカスを移せなかった。
      **-1 フォーカス設定できないハンドラ内で実行した。
      トレース出力 _&return

      メソッド呼び出し 戻り値 = &return, @cmdフォーカス移動.実行() /* NG!です */
      トレース出力 _&return
      **戻り値 意味
      ** 1 正常終了。
      ** 1以外 実行できない。またはエラーで終了した。

      **以上のように[入力後]イベントハンドラ実行中にフォーカスを移動することは不可能

      **次のように、[入力後]イベントハンドラ実行後に時限式タイマーイベントを実行する
      &objectName = "フォーム"
      オブジェクト操作 &objectName{タイマー1 = 1, タイマー値1 = &interval } /* 時限式タイマーをセットします */
     end


    手続き定義終了


引用返信 [メール受信/OFF]
■14083 / ResNo.3)  Re[2]: フォーム入力途中でESC
□投稿者/ 篤姫 -(2023/12/22(Fri) 09:05:49)
    通りすがりさん
    ありがとうございます。
    やってみます。
引用返信 [メール受信/OFF]
■14084 / ResNo.4)  Re[2]: フォーム入力途中でESC
□投稿者/ 篤姫 -(2023/12/22(Fri) 09:09:00)
    ONnojiさん

    ご指導いただいたイベント勉強します。

    ありがとうございます。
引用返信 [メール受信/OFF]
■14085 / ResNo.5)  Re[3]: フォーム入力途中でESC
□投稿者/ ONnoji -(2023/12/22(Fri) 11:32:19)
    2023/12/22(Fri) 16:54:20 編集(投稿者)

    蛇足です。

    ┌when 手続き"テキスト_9::入力後("2023年12月22日",0,0)"を実行開始しました

    │ :テキスト_9
    │ :&return : -1
    │ :&return : 0

    └end

    ┌when 手続き"フォーム::タイマー1( )"を実行開始しました

    │ :&return : 1

    └end

    [入力後]イベントハンドラの引数:&モード/長整数

     入力したデータが確定されたか、キャンセルされたかを示す番号が格納されます。

    値 説明
    1 確定
    0 [Esc]キーによるキャンセル

    ↑これは論理値と同じなので

    if ( .not &モード )
     :
    end

    とすれば、[Esc] キーを検出することになります。

    このように便利なのですが、フォーム上にテキストボックスが多数ある時には、

    それぞれのオブジェクトごとに[入力後]イベントハンドラを作成しなければなりません。

    何故ならば、ファミリには[入力後]イベントハンドラが無いからです。
          ・・・・・・・・・・・・・・・・・・・・・・
    なので、テキストボックスが多数ある時には、コツコツと作るしかありません。(^^ゞ

    これは愚直で格好悪く思えますが、一目瞭然なのでヨシだと思います。

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    格好悪いのを嫌って、[キーダウン]イベントで対応する方法も考えられますが、

    常時[キーダウン]イベントをオンにしておくのは無駄に[キーダウン]イベントが発生するのでデバッグし難いです。
                           ・・・・・・・・・・・・・・・・・・・
    なので、エディタに進入した時に限り[キーダウン]イベントをオンにして、

    それ以外の時には[キーダウン]イベントをオフにするのがスマートです。
                               ・・・・・・
    しかし、スマートにしようとすると、今度はプログラムが複雑になります。

    なので、[キーダウン]イベントよりも、[入力後]イベントの方が優れていると思いますよ。

    なお、[実行コマンド:ESCキー]の方が簡便で面倒臭くないのでお勧めします。

    私だったら[Esc] キーを2度押してね!を採用すると思いますよ。


引用返信 [メール受信/OFF]
■14086 / ResNo.6)  Re[4]: フォーム入力途中でESC
□投稿者/ 篤姫 -(2023/12/22(Fri) 17:08:37)
    ONnojiさん
    実行コマンドで処理を検討しています。
    現在週末で業務処理を行っていますので
    時間がある時にやってみます。

    ありがとうございます。
引用返信 [メール受信/OFF]

■記事リスト / レス記事表示 → [親記事-6]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■14303 / 親記事)  文字置換
□投稿者/ ミーノ -(2024/04/16(Tue) 11:10:34)
    文字置換(関数で)についてお教えください。
     項目名:卒業年月日  日時「1999年03月23日」を
     項目名:卒業年月   文字列「平成11年03月」※月まで
     項目名:卒業年年月日2 文字列「41103」 ※文字の頭が平成は「4」昭和は「3」  
                          令和は「5」

    桐Ver.9を使用しています。
    よろしくお願いします。
引用返信 [メール受信/OFF]

▽[全レス5件(ResNo.1-5 表示)]
■14304 / ResNo.1)  Re[1]: 文字置換
□投稿者/ ONnoji -(2024/04/16(Tue) 14:46:43)
    2024/04/16(Tue) 14:57:47 編集(投稿者)

    > 文字置換(関数で)についてお教えください。
    >  項目名:卒業年月日  日時「1999年03月23日」を
    >  項目名:卒業年月   文字列「平成11年03月」※月まで
    >  項目名:卒業年年月日2 文字列「41103」 ※文字の頭が平成は「4」昭和は「3」  
    >                       令和は「5」
    > 桐Ver.9を使用しています。

    方法としてはいろいろあると思いますが・・・なるべくシンプルにしたつもりです(^^ゞ

    1.文字列「平成11年03月」※月まで

     #sstr( #cond( #str( #年( [卒業年月日] ) ) + #str( #月( [卒業年月日] ), 2 ) < "201905", #元号日付( [卒業年月日], 1 ), 1, #文字置換( #元号日付( [卒業年月日], 1 ), "平成", "令和" ) ), 1, 8 )

    でOKでした。 ※コピペで動きます

     この式の意味は次の通りです。

     まず基本は、 #元号日付( [卒業年月日], 1 ) です。 ⇒ "元号yy年mm月dd日"

     でもこれですと、dd日が混じっていますので除去します。 ⇒ #sstr( #元号日付( [卒業年月日], 1 ), 1, 8 ) ⇒ "元号yy年mm月"

     ところが、2019年 5月 以降は元号が"令和"に改元されたので、2019年 5月 以降か否か判定します。

     #cond( #str( #年( [卒業年月日] ) ) + #str( #月( [卒業年月日] ), 2 ) < "201905", "平成まで", 1, "令和" ) これは模式的な式です

     というのが考え方です。

    2.文字列「41103」 文字の頭が平成は「4」昭和は「3」令和は「5」

     1.で作成した[卒業年月]の文字列を利用します。

      #対応文字列( "1,2,3,4,5", #対応番号( "明治,大正,昭和,平成,令和", #sstr( [卒業年月], 1, 2 ) ) ) 元号を対応する数字に変換

      #str( #num( #sstr( [卒業年月], 3, 2 ) ), 2 ) + #str( #num( #sstr( [卒業年月], 6, 2 ) ), 2 ) ⇒ "yymm"

     これを連結して完成です。

    こちら ※コピペで動きます
     ↓
    #対応文字列( "1,2,3,4,5", #対応番号( "明治,大正,昭和,平成,令和", #sstr( [卒業年月], 1, 2 ) ) ) + #str( #num( #sstr( [卒業年月], 3, 2 ) ), 2 ) + #str( #num( #sstr( [卒業年月], 6, 2 ) ), 2 )


    p.s.

    > 文字置換(関数で)についてお教えください。

    #文字置換関数を使用する方法も可能かと思いますが、その必要性を認めませんでしたので使用していません。悪しからず。(^^ゞ



引用返信 [メール受信/OFF]
■14305 / ResNo.2)  Re[2]: 文字置換
□投稿者/ ミーノ -(2024/04/16(Tue) 15:32:14)
    ONnoji 様

    助かりました。
    ありがとうございました。
    今後もよろしくお願いいたします。
解決済み!
引用返信 [メール受信/OFF]
■14306 / ResNo.3)  Re[3]: 文字置換
□投稿者/ ミーノ -(2024/04/16(Tue) 16:03:37)
    No14305に返信(ミーノさんの記事)
    > ONnoji 様
    >
    解決しました! としておきながら、すみません。

     2022年3月16日 と入力すると、令和34年 3月 となり、53403 となります。
                    令和 4年 3月 となり、50403 とはならないものでしょうか。
    よろしくお願いいたします。
引用返信 [メール受信/OFF]
■14307 / ResNo.4)  Re[4]: 文字置換
□投稿者/ ONnoji -(2024/04/16(Tue) 16:58:30)
    2024/04/16(Tue) 17:01:23 編集(投稿者)

    > 解決しました! としておきながら、すみません。
    >
    >  2022年3月16日 と入力すると、令和34年 3月 となり、53403 となります。
    >                 令和 4年 3月 となり、50403 とはならないものでしょうか。
    > よろしくお願いいたします。

    失礼しました。令和に変換した時に年が平成年のままでしたね。(^^ゞ

    ×【変更前】

    #sstr( #cond( #str( #年( [卒業年月日] ) ) + #str( #月( [卒業年月日] ), 2 ) < "201905", #元号日付( [卒業年月日], 1 ), 1,
    #文字置換( #元号日付( [卒業年月日], 1 ), "平成", "令和" ) ), 1, 8 )


    〇【変更後】 式が長いので2行にしましたがコピペで動くはずです。

    #cond( #str( #年( [卒業年月日] ) ) + #str( #月( [卒業年月日] ), 2 ) < "201905", #sstr( #元号日付( [卒業年月日], 1 ), 1, 8 ) , 1,
    "令和" + #last( " " + #str( #年( #年数加算( [卒業年月日], -18 ) ) - 2000 ), 2 ) + "年" + #last( " " + #str( #月( [卒業年月日] ) ), 2 ) + "月" )


    これでどうでしょうか?

    お試しください。

    p.s.

    以前に #文字置換の回答をしていましたね。

    今回のはあの時よりも数段面倒でしたよ。(^^ゞ

引用返信 [メール受信/OFF]
■14308 / ResNo.5)  Re[5]: 文字置換
□投稿者/ ミーノ -(2024/04/17(Wed) 09:32:57)
    ONnoji 様

    ご面倒をおかけしてすみません。
    理想通りでした。
    ありがとうございました。
    今後ともよろしくお願いいたします
解決済み!
引用返信 [メール受信/OFF]

■記事リスト / レス記事表示 → [親記事-5]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■14218 / 親記事)  レポート印刷
□投稿者/ maru -(2024/03/18(Mon) 06:57:54)
    windows10
    桐10sを使用しています。

    項目名 [番号]に 1から100 までの番号が振られた行データがあります。
    例えば、 1番、5番、25番の行データを 表形式でなく、1番のレポートデータ、5番のレポートデータ、25番のレポートデータを出力したいとき

     キー入力 (15,10),プロンプト=”何番を印刷しますか  ”モード=確定,上書き=する,&印刷数 ,終了状態=&終了状態

    上記のようにコマンド表示させ、入力を  1,5,25 と コンマで区切って入力した後、エンターキーを押すことによって、レポート出力したいのです。

    ヒントをご教授お願いいたします。
引用返信 [メール受信/OFF]

▽[全レス5件(ResNo.1-5 表示)]
■14219 / ResNo.1)  Re[1]: レポート印刷
□投稿者/ ONnoji -(2024/03/18(Mon) 10:59:51)
    2024/03/18(Mon) 15:45:48 編集(投稿者)

    > 項目名 [番号]に 1から100 までの番号が振られた行データがあります。
    > 例えば、 1番、5番、25番の行データを 表形式でなく、1番のレポートデータ、5番のレポートデータ、25番のレポートデータを出力したいとき
    >
    >  キー入力 (15,10),プロンプト=”何番を印刷しますか  ”モード=確定,上書き=する,&印刷数 ,終了状態=&終了状態
    >
    > 上記のようにコマンド表示させ、入力を  1,5,25 と コンマで区切って入力した後、エンターキーを押すことによって、レポート出力したいのです。

    当方は一括処理(履歴を含む)は一切使っていないので、

    [キー入力]コマンドの替わりにフォームのテキストボックスに入力してコマンドボタンを実行する例をご案内します。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    これは単に入力の方法が異なるだけす。

    入力された文字列型データ(例:"1,5,25")を元にして、レポート印刷をする処理(流れ)は一括処理でも[フォーム+イベント処理]でも同じです。
                              ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    コンマで区切られた文字列を左から順番に移動して、
    ・・・・・・・・・・・・・・・・・・・・・・・

    該当するレコードを探索(絞り込み)して、レポート印刷するというロジックなので繰り返し処理が必要になります。

    この繰り返しのロジックは、一括処理(履歴を含む)でも、[フォーム+イベント処理]でも同じです。

    添付ファイルを解凍すると以下のファイルがあります。

    コンマ区切りの.kex
    コンマ区切りの.WFX ← これを開いてください
    コンマ区切りの.TBX
    コンマ区切りの.RPX

    なお、添付ファイルは数日を目途に削除しますので、ダウンロードはお早めに願います。

    p.s.

    <参考>

    名札  メイン
     変数宣言 局所,文字列{ &m印刷レコードList }



    手続き定義開始 cmdレポート印刷Click( )
     変数宣言 自動,文字列{ &icon, &title = "cmdレポート印刷Click( ))", &msg }
     変数宣言 自動,文字列{ &stringList }
     変数宣言 自動,整数 { &ans }

     &stringList = #trim( &m印刷レコードList, 4 )
    ┌if ( &stringList <> #u )

    │ &msg =    "コンマで区切った番号のレコードをレポート印刷しますか?"
    │ &msg = &msg + "\n\n"+ &stringList
    │ メッセージボックス  &title, &msg, アイコン = ?, ボタン指定 = 2, 制御文字展開 = する, &ans

    │┌if ( &ans = 1 ) /* OK:1 キャンセル:2 */
    ││
    ││ 手続き実行 prcレポート印刷( &stringList )
    │└end
    ├else

    │ &msg =      "レポート印刷できません"
    │ &msg = &msg + "\n\n<ヒント>"
    │ &msg = &msg + "\n\nコンマで区切った番号を入力してから実行してください"
    │ メッセージボックス  &title, &msg, アイコン = !, ボタン指定 = 1, 制御文字展開 = する
    └end

    手続き定義終了

    手続き定義開始 prcレポート印刷( 文字列 &stringList )
     変数宣言 自動,文字列{ &icon, &title = "prcレポート印刷( )", &msg }
     変数宣言 自動,文字列{ &string }
     変数宣言 自動,文字列{ &expression }
     変数宣言 自動,文字列{ &comma = #jis( #hex("2C") ) } /* これはコンマ( , ) */
     変数宣言 自動,整数 { &tblNum, &multiTblNum }
     変数宣言 自動,整数 { &i, &loop, &step = 1 }

     &tblNum = #is表
     多重化
     &multiTblNum = #is表

     &stringList = #半角( &stringList )
     &loop = 1 + #文字数( &stringList ) - #文字数( #文字置換( &stringList, &comma, #u ) )
    ┌繰り返し &i = 1, &loop, &step

    │ &string = #対応文字列( &stringList, &i )
    │ トレース出力 _&i, " ", _&string

    │ 解除 *
    │ &expression = &string
    │ 絞り込み [番号]_&expression
    │ トレース出力 _&expression, " ", _( .not #eof )

    │┌if ( .not #eof )
    ││
    ││ レポート印刷  "コンマ区切りの.rpx",プレビュー = する
    │├else
    ││
    ││ &msg =      "レポート印刷できません"
    ││ &msg = &msg + "\n\n<ヒント>"
    ││ &msg = &msg + "\n\n[番号]が " + &string + " のレコードが見つかりません"
    ││ メッセージボックス  &title, &msg, アイコン = !, ボタン指定 = 1, 制御文字展開 = する
    │└end
    └繰り返し終了

     終了 表 &multiTblNum
     編集表 &tblNum /* 必要ならば */

    手続き定義終了

    p.p.s.

    なお、絞り込み [番号]_&expression は、[比較式自身を変数:&expression に代入]して[絞り込み]コマンドを実行しています。

    しかし、慣れていない人が多いと思いますので、ご自身が慣れていらっしゃる方法で[絞り込み]コマンドを実行してください。

    例えば、

     &expression = &string
     絞り込み [番号]_&expression

    は、

     絞り込み [番号]{ #num( &string ) } /* [番号]が数値型なので、数値型に変換して比較します */

    と同じです。

    ※21.5 [絞り込み(検索):比較式]コマンドの高度な使い方|桐の釣魚大全のトップ > フォームアプリケーション教書 第2部
     http://silicon7565.html.xdomain.jp/guide/guide_Part2.htm#section21-5

引用返信 [メール受信/OFF]
■14220 / ResNo.2)  Re[2]: レポート印刷
□投稿者/ maru -(2024/03/18(Mon) 18:45:43)
    早速のアドバイスありがとうございます。
    参考の手続きの流れ、研究させていただきます。
引用返信 [メール受信/OFF]
■14221 / ResNo.3)  Re[3]: レポート印刷
□投稿者/ ONnoji -(2024/03/18(Mon) 23:07:07)
    2024/03/18(Mon) 23:37:22 編集(投稿者)

    老婆心ながら、補足を・・・(^^ゞ

    サンプルでは、絞り込みを

     &expression = &string
     絞り込み [番号]_&expression

    または

     絞り込み [番号]{ #num( &string ) } /* [番号]が数値型なので、数値型に変換して比較します */

    のように、1件ずつ行っています。

    これって、超面倒臭く感じたかもしれませんね。(^^ゞ

    もちろん、やり方によっては "1,5,25" を元にして一発で絞り込むことも可能です。
         ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    しかし、なぜそうしなかったのかというと、

    例えば、もしも、"1,5,25,999" のように、該当しない値 "999"が含まれている場合、

    4レコード絞り込まれずに、3レコード絞り込まれますが、

    その場合に絞り込みに失敗した値 "999"の失敗情報はフィードバックされません。
         ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    ということで、面倒ながら、"1" → "5" → "25" → "999" とコンマで区切られた文字列を左から1件ずつ調べている次第です。

    なお、サンプルでは多重化していますが、レコード移動が見苦しくなければ、多重化はしなくてもOKですよ。
                       ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    p.s.

    今回の "1,5,25" のようにコンマで区切って指定するという印刷の場合のUI(ユーザインターフェース)は普通に見受けられますが、

    桐のフォームならば、フォーム上でチェックボックスのオンで指定するというUI(ユーザインターフェース)も可能かと思いますよ。

    おそらく、チェックボックスのオンで指定するUI(ユーザインターフェース)の方が直感的だと思います。

    しかし、もちろん、個人個人の好みがあるので、最終的にはどちらとも決められませんが・・・

引用返信 [メール受信/OFF]
■14222 / ResNo.4)  Re[4]: レポート印刷
□投稿者/ ONnoji -(2024/03/19(Tue) 14:34:19)
    2024/03/19(Tue) 15:29:21 編集(投稿者)

    > サンプルでは、絞り込みを
    >
    >  &expression = &string
    >  絞り込み [番号]_&expression
    >
    > または
    >
    >  絞り込み [番号]{ #num( &string ) } /* [番号]が数値型なので、数値型に変換して比較します */
    >
    > のように、1件ずつ行っています。
    >
    > これって、超面倒臭く感じたかもしれませんね。(^^ゞ
    >
    > もちろん、やり方によっては "1,5,25" を元にして一発で絞り込むことも可能です。
    >      ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    もしも、簡易的で良しというのであれば、※元々の質問の趣旨だったかな?

    次のように "1,5,25" を元にして一発で絞り込むことも可能です。※おススメはしませんけれど(^^ゞ

    手続き定義開始 cmdTestClick( )
     変数宣言 自動,文字列{ &icon, &title = "cmdTestClick( )", &msg }
     変数宣言 自動,文字列{ &stringList }
     変数宣言 自動,文字列{ &expression }

     &stringList = #trim( &m印刷レコードList, 4 )
     &stringList = #半角( &stringList )

     &expression = "#対応番号( &stringList, #str( [番号] ) ) > 0"
     解除 *
     絞り込み [番号]_&expression

     if ( .not #eof )
      レポート印刷  "コンマ区切りの.rpx",プレビュー = する
     end 

    手続き定義終了

    p.s.

    詳しくは次のwebページを参考にしてください。

     21.6 比較式の左辺と右辺の両方に計算式を指定する|桐の釣魚大全のトップ > フォームアプリケーション教書 第2部
     http://silicon7565.html.xdomain.jp/guide/guide_Part2.htm#section21-6


    p.p.s.

    もちろん、

     &expression = "#対応番号( &stringList, #str( [番号] ) ) > 0"
     解除 *
     絞り込み [番号]_&expression

    は、

     解除 *
     絞り込み [番号]{ #対応番号( &stringList, #str( [番号] ) ) > 0 }

    と同じです。

    &expression に関しては、単純に私( ONnoji )の習慣でして[比較式をリテラルに書かない]というだけですよ。(^^ゞ


引用返信 [メール受信/OFF]
■14226 / ResNo.5)  Re[1]: レポート印刷
□投稿者/ natsu -(2024/03/21(Thu) 00:39:31)
    > 上記のようにコマンド表示させ、入力を  1,5,25 と コンマで区切って入力した後、エンターキーを押すことによって、レポート出力したいのです。

    [番号]が定義されている表を"元表.tbl"として、この"元表.tbl"に文字列項目[ダミー]を追加してください。

    次に、キー入力で得られたコンマ区切りの文字列をCSVファイル変換を経由して、桐のテーブル"tenchi.tbl"に変換します。

    "元表.tbl"の[ダミー]に対し、置換(#表引き)で該当行にフラグを付与します。 こあとは、[ダミー]をフラグあり行で絞り込んでレポート印刷実行です。
    "元表.tbl"の[ダミー]フラグの初期化や絞り込み解除、中間ファイルの削除などはお好みでどうぞ。

    最近はエクセルVBAばっかりで桐のコマンドをすっかり忘れてしまいましたが、桐はデータベースだけあってスクリプトの行数が少なくてすみますね。

    変数宣言 固有,文字列{ &印刷数 }
    変数宣言 固有,数値{ &終了状態 }
    キー入力 (15,10),プロンプト=”何番を印刷しますか  ”モード=確定,上書き=する,&印刷数 ,終了状態=&終了状態

    印字開始 "INSATSU.csv"
    印字 "X," + &印刷数
    印字終了
    ファイル変換 CSV,"INSATSU.csv","INSATSU.tbl",項目名行=あり,自動設定=する,データ開始行=1
    書き出し 転置,"tenchi.tbl",データ型=文字列,*
    表 "tenchi.tbl"
    項目属性変更 変更, [X],{,"整数"}
    項目属性変更 追加, {"Y","文字列"}
    置換 [Y]="●"
    表 "元表.tbl"
    置換 [ダミー]=#表引き([番号],=,"tenchi.tbl",[X],[Y])


引用返信 [メール受信/OFF]

■記事リスト / レス記事表示 → [親記事-5]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■14169 / 親記事)  環境依存文字
□投稿者/ とし -(2024/02/20(Tue) 13:47:16)
    始めて投稿します。
    Windows10で桐10sを使用しています。
    桐10sで環境依存文字を含むデータ行をみつける良い方法はないでしょうか?
    後の作業で文字化けが起こったりするため防ぐ方法があればアドバイスいただけますか?

引用返信 [メール受信/OFF]

▽[全レス5件(ResNo.1-5 表示)]
■14170 / ResNo.1)  Re[1]: 環境依存文字
□投稿者/ ONnoji -(2024/02/20(Tue) 14:17:38)
    2024/02/20(Tue) 15:15:37 編集(投稿者)

    > Windows10で桐10sを使用しています。
    > 桐10sで環境依存文字を含むデータ行をみつける良い方法はないでしょうか?
    > 後の作業で文字化けが起こったりするため防ぐ方法があればアドバイスいただけますか?

    ひょっとして、次の過去ログが参考になるかもしれませんが・・・???

    こちら
     ↓
    過去ログ90
    ■13397 / inTopicNo.1)  unicode が含まれるデータの抽出について
    http://tayu.o0o0.jp/bbs/kiri/cbbs.cgi?mode=al2&namber=13397&no=0&KLOG=90

    > ■13397 / inTopicNo.1)  unicode が含まれるデータの抽出について
    > □投稿者/ きりこ -(2022/07/27(Wed) 12:10:56)
    > 絞り込みの事でお伺い出来たらと思います。
    >
    > エクセルやUTF-8のCSVを桐に読込後、項目内のunicodeの含まれるデータを
    > 絞り込みしたい場合、どのような関数を使用すればよいのでしょうか。
    >
    > 例えば記号を含むデータを絞り込む場合は
    >
    > #is記号([],0)>0
    >
    > 等で対応できましたが、そのような関数を探してみましたがありませんでした。
    > S-JISのCSVにして「?」をサーチするのも大変なのでお分かりになる方が
    > いらっしゃればご教授願いたいと思います。

    p.s.

    ご案内した過去ログは長いので非常に分かりにくいですが、

    結論を申し上げると、「シフトJISとして扱えない文字を調べる」という内容ですよ。
              ・・・・・・・・・・・・・・・・・・・・・

    「シフトJISとして扱えない文字」イコール「環境依存文字」という図式ですね。(^^ゞ


    > ■13411 / inTopicNo.13)  Re[7]: unicode が含まれるデータの抽出について
    > □投稿者/ ONnoji -(2022/07/28(Thu) 13:32:03)
    >> 桐10では「&#134071;」(吉の上が土)や「&#157360;」(脇の力が刀)等の
    >> 環境依存文字と言われているデータをまとめて抽出する事が出来なくて
    >> 頭を悩ましております。
    >
    > なるほど!、環境依存文字なんね。早く言ってよぉ〜(@_@)
    >
    > 最初から入力しないのが一番なんですけれど、こればっかりはどうにもなりそうにないですね。
    >
    > 確かめたところ、やはりシフトJISで扱うと豆腐( "□" )ですね。
    >
    > 手間でしょうけれども、簡単な手続きを作って実行すれば、検出可能ですね。
    >
    > 先頭から終端まで順番に移動するループ内で、文字列の項目の先頭文字から順番に1文字ずつ調べるだけです。
    >
    > 文字数やレコード数が多いと時間がかかるでしょうけれど・・・


引用返信 [メール受信/OFF]
■14171 / ResNo.2)  Re[2]: 環境依存文字
□投稿者/ とし -(2024/02/20(Tue) 15:47:27)
    No14170に返信(ONnojiさんの記事)
    > 2024/02/20(Tue) 15:15:37 編集(投稿者)
    >
    >>Windows10で桐10sを使用しています。
    >>桐10sで環境依存文字を含むデータ行をみつける良い方法はないでしょうか?
    >>後の作業で文字化けが起こったりするため防ぐ方法があればアドバイスいただけますか?
    >
    > ひょっとして、次の過去ログが参考になるかもしれませんが・・・???
    >
    > こちら
    >  ↓
    > 過去ログ90
    > ■13397 / inTopicNo.1)  unicode が含まれるデータの抽出について
    > http://tayu.o0o0.jp/bbs/kiri/cbbs.cgi?mode=al2&namber=13397&no=0&KLOG=90
    >
    >>■13397 / inTopicNo.1)  unicode が含まれるデータの抽出について
    >>□投稿者/ きりこ -(2022/07/27(Wed) 12:10:56)
    >>絞り込みの事でお伺い出来たらと思います。
    >>
    >>エクセルやUTF-8のCSVを桐に読込後、項目内のunicodeの含まれるデータを
    >>絞り込みしたい場合、どのような関数を使用すればよいのでしょうか。
    >>
    >>例えば記号を含むデータを絞り込む場合は
    >>
    >>#is記号([],0)>0
    >>
    >>等で対応できましたが、そのような関数を探してみましたがありませんでした。
    >>S-JISのCSVにして「?」をサーチするのも大変なのでお分かりになる方が
    >>いらっしゃればご教授願いたいと思います。
    >
    > p.s.
    >
    > ご案内した過去ログは長いので非常に分かりにくいですが、
    >
    > 結論を申し上げると、「シフトJISとして扱えない文字を調べる」という内容ですよ。
    >           ・・・・・・・・・・・・・・・・・・・・・
    >
    > 「シフトJISとして扱えない文字」イコール「環境依存文字」という図式ですね。(^^ゞ
    >
    >
    >>■13411 / inTopicNo.13)  Re[7]: unicode が含まれるデータの抽出について
    >>□投稿者/ ONnoji -(2022/07/28(Thu) 13:32:03)
    > >> 桐10では「&#134071;」(吉の上が土)や「&#157360;」(脇の力が刀)等の
    > >> 環境依存文字と言われているデータをまとめて抽出する事が出来なくて
    > >> 頭を悩ましております。
    >>
    >>なるほど!、環境依存文字なんね。早く言ってよぉ〜(@_@)
    >>
    >>最初から入力しないのが一番なんですけれど、こればっかりはどうにもなりそうにないですね。
    >>
    >>確かめたところ、やはりシフトJISで扱うと豆腐( "□" )ですね。
    >>
    >>手間でしょうけれども、簡単な手続きを作って実行すれば、検出可能ですね。
    >>
    >>先頭から終端まで順番に移動するループ内で、文字列の項目の先頭文字から順番に1文字ずつ調べるだけです。
    >>
    >>文字数やレコード数が多いと時間がかかるでしょうけれど・・・
    >
    >
    ONnojiさん」ありがとうございます。
    仰る通り、シフトJISとして扱えない文字を検出したいのです。
    結構、データ量が多いので何か関数の組み合わせのようなものはないかと思案しております。
    現状は過去ログの投稿者さんと同様にシフトJISに書き出し再度読み込みを行なうことによって?を見つける方法を行っています。

    一度、一文字ずつ調べる方法も検討してみます。
    ただ、その一文字が環境依存文字であるかどうか手続きで判断する方法が思いつきません。

    色々試してみます。
引用返信 [メール受信/OFF]
■14173 / ResNo.3)  Re[1]: 環境依存文字
□投稿者/ ONnoji -(2024/02/20(Tue) 16:24:49)
    2024/02/20(Tue) 17:09:30 編集(投稿者)

    > ONnojiさん」ありがとうございます。
    > 仰る通り、シフトJISとして扱えない文字を検出したいのです。
    > 結構、データ量が多いので何か関数の組み合わせのようなものはないかと思案しております。
    > 現状は過去ログの投稿者さんと同様にシフトJISに書き出し再度読み込みを行なうことによって?を見つける方法を行っています。

    項目の先頭文字が、シフトJISではない文字である行を絞り込むのは簡単です。
    ・・・・・・・・

    絞り込み:比較式で

     #hex( #シフトjis( [文字列型項目名] ) ) = "81A0"

    とすれば一発です。

    この "81A0" とは、豆腐("□")のことですが、

    環境設定の[全般]→[高度な設定]の[シフトJIS変換処理で使う置き換え文字(再起動時に有効)]のことです。

    デフォルトでは、豆腐("□")になっているハズです。※ここイジル人はまず居ませんけどね(^^ゞ

    絞り込み:比較式で

     #hex( #シフトjis( [文字列型項目名] ) ) = "81A0"

    で絞り込んだ後、

    [文字列型項目名] にカーソルを当てて、右メニューの[コード表示]で、

    シフトJISで表示することです。

    該当する文字が豆腐("□")になっているのですぐに見つかりますよ。

    > 一度、一文字ずつ調べる方法も検討してみます。
    > ただ、その一文字が環境依存文字であるかどうか手続きで判断する方法が思いつきません。

    一文字づつ調べるためには、先頭文字から末尾文字まで、一文字づつ調べなければなりません。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    そのためには、[フォーム+イベント処理]等でプログラミングする必要がありますね。

    ※つまり、(繰り返し処理を含むので)お手軽な計算式では解決しません。
     ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    プログラミング例は、過去ログの

    ■13415 / inTopicNo.17)  Re[11]: unicode が含まれるデータの抽出について
    □投稿者/ ONnoji -(2022/07/28(Thu) 18:56:23)

    にありますよ。

    p.s.

    読み難くなるので、今後は無駄な引用は削除して投稿してください。

    p.p.s.

    なお、■解決しましたら最下段にチェックを入れてください


引用返信 [メール受信/OFF]
■14174 / ResNo.4)  Re[2]: 環境依存文字
□投稿者/ とし -(2024/02/21(Wed) 09:50:25)
    No14173に返信(ONnojiさんの記事)
    ONnojiさん」ありがとうございます。

    > p.s.
    >
    > 読み難くなるので、今後は無駄な引用は削除して投稿してください。
    >

    初めての投稿で読みづらいところはご容赦ください。

    >
    > 項目の先頭文字が、シフトJISではない文字である行を絞り込むのは簡単です。
    > ・・・・・・・・
    >
    > 絞り込み:比較式で
    >
    >  #hex( #シフトjis( [文字列型項目名] ) ) = "81A0"
    >
    > とすれば一発です。
    >
    > この "81A0" とは、豆腐("□")のことですが、
    >
    > 環境設定の[全般]→[高度な設定]の[シフトJIS変換処理で使う置き換え文字(再起動時に有効)]のことです。
    >
    > デフォルトでは、豆腐("□")になっているハズです。※ここイジル人はまず居ませんけどね(^^ゞ
    >
    > 絞り込み:比較式で
    >
    >  #hex( #シフトjis( [文字列型項目名] ) ) = "81A0"
    >
    > で絞り込んだ後、
    >
    > [文字列型項目名] にカーソルを当てて、右メニューの[コード表示]で、
    >
    > シフトJISで表示することです。
    >
    > 該当する文字が豆腐("□")になっているのですぐに見つかりますよ。
    >

    非常に大きなヒントありがとうございました。

    ご教示いただいたことを参考に全文字チェックを試してみます。

    一度解決済みにしますが、また何かありましたらよろしくお願いします。




解決済み!
引用返信 [メール受信/OFF]
■14176 / ResNo.5)  Re[3]: 環境依存文字
□投稿者/ ONnoji -(2024/02/21(Wed) 11:09:26)
    2024/02/21(Wed) 11:37:26 編集(投稿者)

    > 非常に大きなヒントありがとうございました。
    >
    > ご教示いただいたことを参考に全文字チェックを試してみます。
    >
    > 一度解決済みにしますが、また何かありましたらよろしくお願いします。

    老婆心ながら(^^ゞ

    もう一度、繰り返し処理が必要な内容は、お手軽な計算式では解決しません。

    なので、アルゴリズムが必要になります。

    以下はなるべく桐言語を使わないで記述した疑似コードのアルゴリズムです。

     先頭行へ移動
    ┌繰り返し ( .not #eof )

    │ 探索位置 = 1
    │ 文字数  = #文字数( 項目名 )
    │┌繰り返し ( 探索位置 <= 文字数 )
    ││
    ││ 探索位置の1文字が豆腐("□")か否か判定する
    ││
    ││ 探索位置 = 探索位置 + 1
    │└繰り返し終了

    │ 次行へ移動
    └繰り返し終了

    ご参考になれば幸いです。

    p.s.

    なお、検出結果をどのような形でフィードバックするのかは悩ましいですね。

    直感的には、

    ・検出結果(行番号,文字位置:文字)をテキストファイルに出力する
     または
    ・該当文字の前後を " ? "で囲む

    が考えられますが・・・(^^ゞ

引用返信 [メール受信/OFF]

■記事リスト / レス記事表示 → [親記事-5]



■記事リスト / ▲上のスレッド
■13928 / 親記事)  テキスト読み込み
□投稿者/ oyaji -(2023/08/31(Thu) 18:58:19)
    <.........><.......><.........><.......><.........><.......><.........><.......>の改行がされないテキストを><個所で改行したテキストとして表に読み込みたいのですが、どうすればいいのでしょうか?
引用返信 [メール受信/OFF]

▽[全レス5件(ResNo.1-5 表示)]
■13929 / ResNo.1)  Re[1]: テキスト読み込み
□投稿者/ AKome -(2023/09/01(Fri) 23:20:38)
    2023/09/01(Fri) 23:37:04 編集(投稿者)

    No13928に返信(oyajiさんの記事)

    以下で、動作確認しました。

    改行されていない変換前のファイル名を ”テスト.txt” としています。
    改行されたデータが #一括パス名 + "改行しました.txt" に出力されます。

    なお、イベント処理になります。
    コマンドボタンに cmd改行しましょう を設定して実行してください。


    手続き定義開始 cmd改行しましょう( )
     変数宣言 自動,文字列{ &character }
     変数宣言 自動,整数 { &printStatus , &status, &return }

     印字開始 #一括パス名 + "改行しました.txt" , 終了状態 = &printStatus

      ファイル入力開始 "テスト.txt”, 終了状態 = &status
      if ( &status = 1 )
       繰り返し
        ファイル入力 &character , 文字数=1, 終了状態=&return

        印字 &character,
        if (&character = ">" )  /* > > ※全角、半角に注意  */
         印字 _13,_10,
        end

        * トレース出力 _&character , " ", _&character
        * テストの際にはトレース出力を開始して確認しましょう。

        if( &return = -1 )
         繰り返し中止
        end

       繰り返し終了
      end
      ファイル入力終了

     印字終了

    手続き定義終了

引用返信 [メール受信/OFF]
■13931 / ResNo.2)  Re[2]: テキスト読み込み
□投稿者/ oyaji -(2023/09/02(Sat) 04:13:29)
    寝起きだったためか、返事をいただいていたことに気づかず質問を追加していました。
    大変申し訳ありません。いただいた内容早速吟味させていただきます。

引用返信 [メール受信/OFF]
■13932 / ResNo.3)  Re[3]: テキスト読み込み
□投稿者/ oyaji -(2023/09/02(Sat) 05:28:52)
    うまくいきました。AKome様、ありがとうございました。
    ここ2日、行き詰まっていたもので、心から感謝申し上げます。

    甘えついでに教えていただきたいのですが、 印字 _13,_10, の意味はどういうことですか。
    桐ヘルプを見てもよく理解できませんでした。
解決済み!
引用返信 [メール受信/OFF]
■13937 / ResNo.4)  Re[4]: テキスト読み込み
□投稿者/ AKome -(2023/09/02(Sat) 11:13:46)
    No13932に返信(oyajiさんの記事)
    > 印字 _13,_10, の意味はどういうことですか。

    改行コードです。

    Windows系では「CR+LF」が改行コードとして採用されています
    ※わわわIT用語辞典 より引用

    キャリッジリターン 【CR】 Carriage Return / 行頭復帰 ASCII文字コード体系では十進数で13番
    ラインフィード 【LF】 Line Feed / 改行 ASCII文字コード体系では十進数で10番
    ※IT用語辞典 より引用

    ーーーーーーーーーーーーーー

    桐の
    印字 コマンドの解説では

    説明
    [印字]コマンドで自動出力する改行コードは、CRLF です。

    記述例
    各項目のデータをタブコードで区切り、行末に改行コードをつけます( _9 はタブコード)。
    印字 [氏名],_9,[電話番号],_9,[郵便番号],_9,[住所]

    各項目のデータを改行コード(0Dh)で区切り、改ページコード(0Ch)を行の区切りにします。
    印字 [氏名],_13,[電話番号],_13,[郵便番号],_13,[住所],_12,

    改行します。
    印字

    ※ 数値の後の " , " (カンマ)の有無には注意してください。

引用返信 [メール受信/OFF]
■13938 / ResNo.5)  Re[5]: テキスト読み込み
□投稿者/ oyaji -(2023/09/04(Mon) 20:27:45)
    詳細な説明本当にありがとうございました。
    リターンの件もそうですが、なにより、いろんな言語がもつ、いわゆるオープンファイルの機能があったのか、と桐の奥深さに感激しています。

    桐のプログラミング言語としての認識がもっと広がればいいのにな、と思いました。

    また分からないことがあったらぜひ教えてください。よろしくお願い申し上げます。


引用返信 [メール受信/OFF]

■記事リスト / レス記事表示 → [親記事-5]






1462777

Mode/  Pass/

HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -