(現在 過去ログ37 を表示中)

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

[ 最新記事及び返信フォームをトピックトップへ ]

■5795 / inTopicNo.1)  時間を加算して比較→別表から削除する方法
  
□投稿者/ 猫子 -(2010/04/23(Fri) 14:53:38)
    はじめまして。
    初歩的な質問かもしれませんが、どうぞ宜しくお願い致します。

    表Aと表Bの[時間]項目に00:00という形式で時間が入力されており、
    表Aの先頭行の[時間]から15分後より前の時間のデータだけを表Bから絞り込んで
    表から削除したいですが、方法がわかりません。

    例.【表A】         
      [時間] ※文字列型    
      07:50
    07:55
    08:00
    08:10

    【表B】
    [時間] ※文字列型
    07:00
    07:20
    08:30
    09:00

    表Aの1行目 07:50 に15分を足した 07:55 より前の時間のもの 07:00 と 07:20 を
    表Bから削除したいです。

    下記のように試してみたのですが…
    表A
      ジャンプ 行番号=先頭
      &スタート時間 = [時刻]

    表B
      絞り込み [時刻] { ≦ &スタート時間 }
       ↑
      ここで15分を加算する方法がわかりませんでした。


    わかりにくい説明で申し訳ありませんが、ご教授願います。
    宜しくお願い致します。
引用返信 [メール受信/OFF] 削除キー/
■5797 / inTopicNo.2)  Re[1]: 時間を加算して比較→別表から削除する方法
□投稿者/ 通りすがり -(2010/04/23(Fri) 16:53:46)
    > ここで15分を加算する方法がわかりませんでした。
    &スタート時間 = #STR(#時間値(&スタート時間) + i"00:15")

    > 絞り込み [時刻] { ≦ &スタート時間 }
    文字列の大小比較はスマートでないから、これを機会に時間型でデータを持とう
引用返信 [メール受信/OFF] 削除キー/
■5798 / inTopicNo.3)  Re[1]: 時間を加算して比較→別表から削除する方法
□投稿者/ 今村 誠 -(2010/04/23(Fri) 19:03:23)
    猫子さんこんにちは
    > 例.【表A】         
    >   [時間] ※文字列型    
    > 【表B】
    > [時間] ※文字列型
    >   絞り込み [時刻] { ≦ &スタート時間 }
    この比較式を書くと比較できないデータ型と言われませんか?
    文字列では大小の比較は向いていないと思います。
    数値や日時でしたら簡単ですが時間の場合、一度数値に変換
    した方が大小の比較はしやすいと思います。
    サンプルのneko.cmdを実行してみてください。
    var Int { &Icase = 1 , &Itb1 , &Itb2 , &Iend , &Iwno}\
    ,Long { &Lct , &Lmax ,&Lmod =13 }
    var str { &Sスタート時間 }
    var time{ &Tスタート時間 }
    var Dec { &Nスタート時間 }
     表 "A"
     &Itb1 = #IS表
     &Lmax = #CEIL( #総件数 / &Lmod )
     表 "B"
     &Itb2 = #IS表
     表表示
     ウィンドウリスト取得 &Iwno
     ウィンドウ位置 最大化 , &Iwno
     if (#処理条件名検索(14,"時刻" )<1)
      索引定義 索引名="時刻", 重複=許可, 条件登録=時刻, {[時刻]降順}
      確認 "ここを通過"
     end
     並べ替え 索引名 = "時刻"
     確認 #STR(&Lmax)
     ウィンドウ位置 最大化,-1
     for &Lct = 1 , &Lmax-1
      &Icase = #MOD(&Icase,3)+1
      編集表 &Itb1
      ジャンプ 行番号=&Lct*&Lmod
      &Sスタート時間 = [時刻]
      &Tスタート時間 = #時間加算(#時間値([時刻]),15,2)
      &Nスタート時間 = #時間数値(#時間加算(#時間値([時刻]),15,2),2)
      編集表 &Itb2
      if ( &Icase = 1)
       絞り込み [時刻] { #時間数値(#時間値([時刻]),2)≦ #時間数値(#時間加算(#時間値(&Sスタート時間),15,2),2)}
      else if ( &Icase = 2 )
       絞り込み [時刻] { #時間数値(#時間値([時刻]),2)≦ #時間数値(&Tスタート時間,2)}
      else if ( &Icase = 3 )
       絞り込み [時刻] { #時間数値(#時間値([時刻]),2)≦ &Nスタート時間 }
      end
      表形式編集
      確認 #str(&Icase)+"繰返を終了するEsc実行:Enter中止"+#STR(&Lct),&Iend
      cond ( &Iend = 0 ) break
      解除 1
     end

    終了
引用返信 [メール受信/OFF] 削除キー/
■5799 / inTopicNo.4)  通りすがりさま
□投稿者/ 猫子 -(2010/04/24(Sat) 05:11:03)
    お返事ありがとうございました。
    お礼が遅くなって申し訳ありません。

    > &スタート時間 = #STR(#時間値(&スタート時間) + i"00:15")

    教えていただいた式で動かしてみたところ、&スタート時間 に入っている値が
    「8時間5分0秒」という経過時間の表示になっていました。
    「08:05」という表示になるように、うんうん悩んで環境設定の時間型をいじったり
    いろいろ試してみたのですがわかりませんでした。


    > 文字列の大小比較はスマートでないから、これを機会に時間型でデータを持とう

    そうですよね。仰る通りだと思います。
    元データがExcelで、日時型に変換したらおかしなことになってしまったので
    そのまま文字列で扱っていました。

    時間のデータは07:00〜19:00までしかないのですが、時間の大小比較をする場合
    項目のデータ型は「日時型」なら可能でしょうか?
    お忙しいところ、恐れ入りますが、またお時間がございましたらご教示下さい。
    宜しくお願い致します。
引用返信 [メール受信/OFF] 削除キー/
■5800 / inTopicNo.5)  今村 誠さま
□投稿者/ 猫子 -(2010/04/24(Sat) 07:53:10)
    お返事ありがとうございました。
    お礼が遅くなって申し訳ありません。

    サンプルのファイルまで作っていただきまして、本当にありがとうございました。


    >>例.【表A】         
    >>  [時間] ※文字列型    
    >> 【表B】
    >> [時間] ※文字列型
    >>  絞り込み [時刻] { ≦ &スタート時間 }
    > この比較式を書くと比較できないデータ型と言われませんか?

    特に何のエラーもなく、一応、表Aの 07:50 よりも小さい 07:00 と 07:20 の
    2行だけを絞り込んだ状態で表Bは表示されています。。。
    文字列で時間を比較判定しているのは確かに気持ち悪いのですが…^^;


    neko.cmdを拝見させていただいて、私には非常に難易度が高く
    どういう意味なのかわからないところを調べながらなので、
    まだ流れを理解できていません。
    すみません。

    もうちょっと粘ってみますので、取り急ぎお礼まで。

    また後ほど結果をご報告にまいりますので、宜しくお願い致します。
引用返信 [メール受信/OFF] 削除キー/
■5801 / inTopicNo.6)  Re[3]: 通りすがりさま
□投稿者/ 通りすがり -(2010/04/24(Sat) 09:27:18)
    > 「08:05」という表示になるように
    確かに、先頭桁にゼロ詰めが効きませんねぇ
    通りすがりの走り書きで失礼しました

    > 時間のデータは07:00〜19:00までしかないのですが、時間の大小比較をする場合
    > 項目のデータ型は「日時型」なら可能でしょうか?
    工夫すれば可能ですが、後々めんどさが付きまとうでしょう
    日時型は時間軸上の一時点を表すので、意味が違ってきます
    00:00 からの経過時間データなので、時間型が良いです

    Accessでは時間型がないので、常に色々と手間暇が必要になるけど
    せっかく高価な桐を使ってるんだから
引用返信 [メール受信/OFF] 削除キー/
■5802 / inTopicNo.7)  ありがとうございました!
□投稿者/ 猫子 -(2010/04/25(Sun) 01:44:14)
    通りすがりさま

    お返事どうもありがとうございました。


    > 日時型は時間軸上の一時点を表すので、意味が違ってきます
    > 00:00 からの経過時間データなので、時間型が良いです

    意味がわかりました!!!
    00:00 からの経過時間なんですね、なるほどです。
    ヘルプを読んでもよくわからなくて、スッキリしました!
    本当にありがとうございました。

    今後は時間型で取り扱うように致します。
    ありがとうございました。

    通りすがりさまと今村さまのお陰で、解決しました!

    まだまだわからないことばかりなので、近々またこちらで相談させていただく
    ことになると思いますが、どうぞ宜しくお願い致します。
引用返信 [メール受信/OFF] 削除キー/
■5803 / inTopicNo.8)  ありがとうございました!
□投稿者/ 猫子 -(2010/04/25(Sun) 02:35:48)
    お返事が遅くなり申し訳ありません。
    今村さまにいただいたサンプルとにらめっこをしながら、なんとか希望通りの動きを得られました。ありがとうございます!!!

    neko.cmdを基に、下記のような記述となりましたので、もしよろしければお時間のある時にでもチェックしていただけませんでしょうか?

    ----------------------------------------------------------
    ※表1と表2は、名札 表オープンのところで開いて、昇順並べ替えをしてあります。
    変数 共通 , 文字列 { &Sスタート時間 }
    変数 共通 , 時間  { &Tスタート時間 }
    変数 共通 , 数値 { &Nスタート時間 }

    編集表 1
      ジャンプ 行番号=先頭

      &Sスタート時間 = [時刻]

      &Tスタート時間 = #時間加算 (#時間値(&Sスタート時間),15,2)

      &Nスタート時間 = #時間数値 (&Tスタート時間,2)
          
    編集表 2
    絞り込み [時刻] {#時間数値(#時間値([時刻]),2) ≦ &Nスタート時間}

    絞り込み 補集合     
    ----------------------------------------------------------

    表1のスタート時間より前の時間のデータは不要なので、削除しようと思っていたのですが、補集合もいいかな?と…。
    削除していくのと、補集合ではどちらの方が処理が早くプログラム的に安全でしょうか?

    私は基本をきちんと勉強する前に一括処理に手を出すことになってしまったので、お作法的なことも理解していません。
    neko.cmdの中にもまだ「?」なところがいくつかありますが、投げ出さずに頑張りたいと思います。
    またこちらで相談させていただくことになりますので、その時はどうぞ宜しくお願い致します。
解決済み!
引用返信 [メール受信/OFF] 削除キー/
■5805 / inTopicNo.9)  Re[3]: ありがとうございました!
□投稿者/ 今村 誠 -(2010/04/25(Sun) 10:53:42)
    猫子さんこんにちは

    *表1と表2は、名札 表オープンのところで開いて、昇順並べ替えをしてあります。

    手続き実行 表オープン() /* 手続き実行は「call 表オープン()」とも書けます */

    手続き定義開始 表オープン() /* 名札でなく手続き定義開始が良いです */
    /* ↑は「proc 表オープン()」とも書けます。 */

     var 自動,整数 { &Itb1 , &Itb2 }

     表 "A"    /* 表を開くときは表番号を指定してはいけません */
     &Itb1 = #IS表 /* 他の手続きや名札でその表番号が開かれている */

     表 "B"    /* とエラーになります。           */
     &Itb2 = #IS表 /* 表を開いたら必ず表の番号を取得します。 */

    * 変数 共通 , 時間  { &Tスタート時間 }
    * その場限り↑の変数に共通は必要ありません。
    * 異なる手続きや名札で変数値を受け渡すときに固有変数を使用し
    * 桐起動中常に変動しない変数値を確保したいときに共通を使います。
    * 変数を自動で宣言すると手続き定義を終了したら自動で変数は
    * メモリーから削除されますので動作がわずかに速くなります。
    * 手続き定義の中で変数の種類の記載をしないと自動と認識されます。

     変数 自動 , 時間  { &Tスタート時間 }

    * 編集表 1 /* ←表の番号を定数で指定してはいけません */

     編集表 &Itb1 /* ←表を開いたとき取得した変数で指定します */
     ジャンプ 行番号=先頭

    *  &Sスタート時間 = [時刻] /* 必要のない代入です */
     &Tスタート時間 = #時間加算 (#時間値([時刻]),15,2)
    *  &Nスタート時間 = #時間数値 (&Tスタート時間,2)
     /*  ↑はサンプルで示しただけです必要ありません */
          
     編集表 &Itb2 /* ←表を開いたとき取得した変数で指定します */

     絞り込み [時刻] {#時間値([時刻]) ≦ &Tスタート時間}
    * 絞り込み [時刻] {#時間値([時刻]),2) > &Tスタート時間}
    * ↑のように比較式を記入すれば補集合の必要はないように思います
    /* 比較式を記入する↑部分で左辺を省かないで同じデータ型で */
    /* 比較するようにすれば数値型で比較する必要はありません。 */
    /* 時間や日時や数値は 文字列 と違い曖昧さが存在しません  */
    /* コマンドが置換の場合使用変数は固有か共通で宣言します */

     絞り込み 補集合

    手続き定義終了 /* ←は「end」とも書けます。 */

    > 削除していくのと、補集合ではどちらの方が処理が早く
    補集合が早いでしょう
    > プログラム的に安全でしょうか?
    「プログラムの安全」はその後に何が続くのが分からない
    のでコメントのしようがありません。
    何をしているのかはこちらでは分かりません。
    具体的な例を出さないでコマンドの質問だけだと
    回り道をしているかもしれません。
    時間とあるから勤怠管理か稼働時間の計算かなと思いました。
引用返信 [メール受信/OFF] 削除キー/
■5806 / inTopicNo.10)  Re[4]: ありがとうございました!
□投稿者/ 尾形 -(2010/04/25(Sun) 22:31:34)
    どうも、こんにちは

    > /* 表を開いたら必ず表の番号を取得します。 */
    これってなぜですか?

    自分の場合だけかもしれませんけど
    変数表番号だと読みにくくて


引用返信 [メール受信/OFF] 削除キー/
■5807 / inTopicNo.11)  Re[5]: ありがとうございました!
□投稿者/ 今村 誠 -(2010/04/25(Sun) 22:45:37)
    尾形さん
    >>/* 表を開いたら必ず表の番号を取得します。 */
    > これってなぜですか?
    編集表を切り替えるときに名前でなく番号で指定
    できるので楽じゃないでしょうか。

    > 自分の場合だけかもしれませんけど
    > 変数表番号だと読みにくくて
    変数表番号の名前は&Itb1や&Itb2でなく
    &I得意先や&I販売マスターや&I販売サブ
    とすれば読みにくいとは思いません。

    繰り返しながら編集表を変えるような一括処理なら
    開いた表の番号を取得して切り替えたが分かり易い
    と思います。

    多重化した自己表引きでは表番号でしか切り替え
    できません。

    No.5655の表引きフォームはそのように作っています。
引用返信 [メール受信/OFF] 削除キー/
■5808 / inTopicNo.12)  ありがとうございました!
□投稿者/ 猫子 -(2010/04/26(Mon) 16:24:08)
    今村さま

    ご丁寧でわかりやすい解説をどうもありがとうございました!
    表を開く時のお作法と変数の扱い方まで詳しく教えていただきまして、本当にありがとうございます。

    昨日、お返事を拝見して、「手続き定義開始」と「手続き実行」について桐のヘルプとインターネットで調べてみたのですが、いまいちよくわかりませんでした。

    「手続き定義開始」の中に「手続き実行」に引き渡す変数を () 内に書いて、「手続き実行」の処理結果を受け取る、ということでしょうか?
    「手続き実行」を先に書くのですか?
    質問内容がタイトルから脱線してしまい申し訳ありません。

    前任者の書いたものを参考にしながら勉強しているのですが、その中に「手続き定義開始」というコマンドは一度も登場せず「名札」を使用していて、古いからでしょうか?
    もう前任者がいないので質問できる相手もいなくて途方に暮れています(泣)


    > 何をしているのかはこちらでは分かりません。
    > 具体的な例を出さないでコマンドの質問だけだと
    > 回り道をしているかもしれません。
    > 時間とあるから勤怠管理か稼働時間の計算かなと思いました。

    はい、回り道していると思います。。。
    本当はファイルごとアップして、見ていただきたいのですが、具体的な項目名などを書いてしまうと扱っているデータを公開してしまうことになるので、それは上司からストップをかけられているんです。

    一括処理の入門書を探しているのですが、もう手に入らないものがほとんどなんですね。
    うーーんうーーーん…
引用返信 [メール受信/OFF] 削除キー/
■5809 / inTopicNo.13)  Re[5]: ありがとうございました!
□投稿者/ 今村 誠 -(2010/04/26(Mon) 17:46:14)
引用返信 [メール受信/OFF] 削除キー/
■5810 / inTopicNo.14)  Re[5]: ありがとうございました!
□投稿者/ 通りすがり -(2010/04/26(Mon) 23:00:18)
    > 前任者の書いたものを参考にしながら勉強しているのですが、その中に「手続き定義開始」というコマンドは一度も登場せず「名札」を使用していて、古いからでしょうか?

    横から、これだけコメント

    相当昔から、プログラム中であっちこっちへ飛ぶコーディングは様々な理由から良くないとされ、そのようなスタイルは現在では絶滅しています
    あっちこっちへ行って、絡んだスパゲティ状態で訳解らなくなる
    桐の「名札」やGoto命令が相当します

    それに変わって、サブルーチンを呼ぶスタイルでコーディングします
    桐の「手続き実行」やCall命令が相当します
引用返信 [メール受信/OFF] 削除キー/
■5811 / inTopicNo.15)  ありがとうございました!
□投稿者/ 猫子 -(2010/04/27(Tue) 16:04:09)
    今村さま

    お世話になります。
    お礼が遅くなり申し訳ございません。

    参考になるサイトを教えていただきましてありがとうございました。
    そちらで勉強しますね。

    また、わからないことが出てきましたら、こちらで相談させていただきたいと思いますので、その時はどうぞ宜しくお願い致します。

    ありがとうございました!
引用返信 [メール受信/OFF] 削除キー/
■5812 / inTopicNo.16)  ありがとうございました!
□投稿者/ 猫子 -(2010/04/27(Tue) 16:56:48)
    通りすがりさま

    お返事ありがとうございます。
    お礼が遅くなり申し訳ございません。


    > 相当昔から、プログラム中であっちこっちへ飛ぶコーディングは様々な理由から良くないとされ、そのようなスタイルは現在では絶滅しています
    > あっちこっちへ行って、絡んだスパゲティ状態で訳解らなくなる
    > 桐の「名札」やGoto命令が相当します
    >
    > それに変わって、サブルーチンを呼ぶスタイルでコーディングします
    > 桐の「手続き実行」やCall命令が相当します

    そうなんですか…絶滅なんですね。
    勉強になります。。。
    「手続き定義開始」と「手続き実行」を使うようにしますね。

    わかりやすく教えていただきまして、ありがとうございました。

    また、こちらで相談させていただきますのでその時はどうぞ宜しくお願い致します。

    ありがとうございました!
引用返信 [メール受信/OFF] 削除キー/
■5829 / inTopicNo.17)  Re[7]: ありがとうございました!
□投稿者/ 桐桐舞い -(2010/04/28(Wed) 21:44:07)
    No5812に返信(猫子さんの記事)
    > そうなんですか…絶滅なんですね。
    > 勉強になります。。。
    > 「手続き定義開始」と「手続き実行」を使うようにしますね。

    多分 前回一括作った方が

    名札 ○○  の後に

    手続き終了  というコマンドがあれば

    分岐で ○○に来たのでなく
    手続き実行 ○○

    のサブルーチンを呼ぶスタイルかも知れませんよ。
    DOS時代から組んでいる方はこの方法かもしれませんね

    「手続き定義開始」のほうが今はいいですがね。
引用返信 [メール受信/OFF] 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/

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

- Child Tree -
- Antispam Version -