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

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

[ 親記事をトピックトップへ ]

このトピックに書きこむ

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

■12588 / inTopicNo.1)  Re[4]: 記述の局部的添削プラスアルファ
  
□投稿者/ hiro -(2020/08/13(Thu) 16:35:40)
    ちなみにですが
    #空ファイル=0は今、表が開いてる見た目状態で、補集合で
    裏にデータがあるとしても空ファイルと言う事でした。これは初めて知りました。
    #終端行=0はデータが見えてても最後の行の次の行の何もない状態の行で
    #総件数<>0ですが、処理方法によっては削除行も数えると言う事です

引用返信 [メール受信/OFF] 削除キー/
■12587 / inTopicNo.2)  Re[10]: 繰り返し
□投稿者/ hiro -(2020/08/13(Thu) 16:22:06)
    ONnojiさん、どうもありがとうございました
    下の方にも書きましたが、条件の条件と言いますか今のこの文法ではどうしても無理があり、繰り返し(条件式)のコマンドを使う事により、残りをケースで振り分ける事で解決しました。色々ありがとうございました。
解決済み!
引用返信 [メール受信/OFF] 削除キー/
■12586 / inTopicNo.3)  Re[3]: 繰り返し
□投稿者/ hiro -(2020/08/13(Thu) 16:16:23)
    ONnojiさん、解説どうもありがとうございます

    その後、私も四苦八苦して、繰り返しの条件付きのコマンドを利用する事にしました
    その条件で空ファイルを除くにしてあげれば、以下の繰り返しは必ずデータのある表なので、それをケースで=0、<0、>0の3パターンに振り分ける事で
    思った通りの結果が出せるようになりました。
    出来てしまえば 振り返ると当たり前のような処理なのに、こういうコマンドもあるよという知識が不足していました。
    ありがとうございました。
解決済み!
引用返信 [メール受信/OFF] 削除キー/
■12585 / inTopicNo.4)  Re[2]: 繰り返し
□投稿者/ ONnoji -(2020/08/13(Thu) 10:50:15)
    2020/08/14(Fri) 17:57:40 編集(投稿者)
    2020/08/13(Thu) 18:50:19 編集(投稿者)
    2020/08/13(Thu) 11:52:05 編集(投稿者)

    > しかしながら、DOS桐からの利用者は、世の中で言うところの「構造化プログラミング」を知らない人が多いです。
    > 今回はそこがネックであると断言しますよ。

    まず、用語を整理します。

    世の中で言うところの「構造化プログラミング」ですが、非常に広範囲な概念になっています。

    なので、「論理の構造化」手法に限定して話を進めます。

    なお、書籍でもwebでも、「論理の構造化」は疑似コード(または高級言語)、またはフローチャートを用いて解説していますが、

    それでは理解できないと思いますので、桐言語のコマンドで解説します。

    まず基本中の基本は、順次です。※高田純次ではありません。

    ■順次(SEQUENCE:シーケンス)

     これは上の行から順番に実行してくということです。

     つまり、横書きの本を読んでいくのと同じす。

     誰も、途中を飛ばして読んだり、下から読んだりしないでしょ。それと同じです。

     この時、空行も実行します。ただし、[注釈 *]コマンドと同じで何事も起きないだけです。

     これが基本ですが、順次だけでは、条件ごとの処理や、繰り返し処理ができませんね。

     そこで、

      ・選択  (IFTHENELSE:イフゼンエルス) ※ケース(CASE:ケース)は選択のバリエーションです
      ・繰り返し(DOWHILE  :ドゥーホワイル)

     があります。

    ■選択(IFTHENELSE:イフゼンエルス)

     桐言語の場合には、if (条件式) ... else ... end になります。


     if (条件式)
       ↑
       :
      条件式が真の場合にこの範囲を順次実行します:A
       :
       ↓
     else
       ↑
       :
      条件式が偽の場合にこの範囲を順次実行します:B
       :
       ↓
     end
     AまたはBの範囲を実行した後は end の次の行から順次実行します。

     ※if (条件式) ... end のように else節 がない場合には、
      条件式が真の場合には、Aの範囲を順次実行します
      条件式が偽の場合には、Aの範囲を順次実行しません。
      その後は end の次の行から順次実行します。

     ※if (条件式) ... else if (条件式) ... end は、見かけ上のネスト(入れ子)が浅くなるだけで、if (条件式) ... else ... end のネスト(入れ子)と同じです。

     ※ケース(CASE:ケース)は選択のバリエーションです。見かけ上のネスト(入れ子)が浅くなるだけで、if (条件式) ... else ... end と同じです。

    ■繰り返し(DOWHILE:ドゥーホワイル)

     桐言語の場合には、繰り返し (条件式) ... 繰り返し終了 になります。

     繰り返し (条件式) は、if (条件式) ... end を何度も繰り返すことと同じです。

     つまり、

      ┌繰り返し ( .not #eof )
      │  ↑
      │  :
      │ この範囲を順次実行します
      │  :
      │  ↓
      │ ジャンプ 行番号 = 次行
      └繰り返し終了

      ↓次のように if ... end を繰り返すのと等価です。

      ┌if ( .not #eof )      ┌if ( .not #eof )      ┌if ( .not #eof )
      │              │              │
      │              │              │
      │            → │            → │
      │              │              │
      │              │              │
      │ジャンプ 行番号 = 次行   │ジャンプ 行番号 = 次行   │ジャンプ 行番号 = 次行
      └end             └end             └end

     前判断型の 繰り返し (条件式) ... 繰り返し終了 で重要なポイントは、

     繰り返し (条件式)の条件式が偽の場合には、繰り返し (条件式) ... 繰り返し終了 の範囲を実行しないということです。

     そのために、(条件式)の評価次第で、繰り返し (条件式) ... 繰り返し終了 の範囲を一度も実行しない場合もあります。

     これは、繰り返し (条件式) は、if (条件式) ... end を何度も繰り返すことと同じだからです。

     順次実行して、[繰り返し終了]に到達した段階で、条件式を再び評価します。

     この時、条件式の値が偽であれば、[繰り返し終了]コマンドの次の行から順次実行します。

     この時、条件式の値が真であれば、[繰り返し]コマンドの次の行から順次実行します。※つまり繰り返しを続行します。


     なお、無条件で実行する場合には、繰り返し (条件式)の条件式を恒真式にすればOKです。

     つまり、

      ┌繰り返し ( 1 ) /* イチ(1)は真:恒真式 */
      │  ↑
      │  :
      │ この範囲を順次実行します
      │  :
      │  ↓
      └繰り返し終了

     これは、桐言語の場合の、繰り返し ... 繰り返し終了 です。※ (条件式)がありません。

      ┌繰り返し /* 無条件 */
      │  ↑
      │  :
      │ この範囲を順次実行します
      │  :
      │  ↓
      └繰り返し終了

     ただし、無条件(または恒真式)で繰り返す場合には、無限ループになりますので、[繰り返し中止]コマンドを使ってループから脱出します。

    ■繰り返し(DOUNTIL:ドゥーアンティル)

     [if ( 条件式 )][繰り返し中止][end]コマンドをセットにしたものを、[繰り返し終了]コマンドの直前に置くと、後判断型の繰り返しが作れます。

      ┌繰り返し ※DOWHILE の(条件式)を ───┐←ここに(条件式)を置くと前判断型DOWHILE
      │  ↑                 │
      │  :                 │
      │ この範囲を順次実行します       │
      │  :                 │
      │  ↓                 │
      │┌if (条件式)   ←─ここへ移動する ─┘←ここに(条件式)を置くと後判断型DOUNTIL
     ←┼┼─繰り返し中止
      │└end
      └繰り返し終了

     
    ■カウント制御ループ ※for文 の繰り返し

     繰り返しにはもうひとつのパターンがあります。

     それは、繰り返し 回数 … 繰り返し終了 です。

     これは、配列変数の要素を順番に取り出す場合などに使用します。

       変数宣言 整数{ &i, &loop, &step }

       &loop = #配列要素数( "variableName" )  /* 配列の場合には1以上の要素数、配列でない場合にはゼロ、変数が存在しなければマイナスイチ(-1) */
       &step = 1
      ┌繰り返し &i = 1,&loop,&step
      │  ↑
      │  :
      │ この範囲を順次実行します
      │  :
      │  ↓
      └繰り返し終了

     構文は、繰り返し <変数名> = <開始値>,<終了値>,<加算値> である。

     上の例では、配列でない場合には<終了値>:&loop の値はゼロなので、

     繰り返し &i = 1,0,1 になります。これはすで<開始値>:イチが<終了値>:&loop を超えているので、繰り返し ... 繰り返し終了 の範囲を実行しません。

     同様に、変数が存在しない場合には<終了値>:&loop の値はマイナスイチ(-1)なので、やはり 繰り返し ... 繰り返し終了 の範囲を実行しません。

     という具合にややこしくなりますが、手を抜いて<加算値>を省略しなければ失敗はしません。

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

     なお、「論理の構造化」では、必ず条件式が必要になります。初級者は条件式に非常に弱いので拙作HPも参考にしてください。

     桐の釣魚大全 http://silicon7565.html.xdomain.jp/
     フォームアプリケーション教書 第2部
     30 論理と条件式


引用返信 [メール受信/OFF] 削除キー/
■12584 / inTopicNo.5)  Re[10]: 繰り返し
□投稿者/ ONnoji -(2020/08/13(Thu) 08:55:15)
    2020/08/13(Thu) 11:39:48 編集(投稿者)
    2020/08/13(Thu) 09:29:05 編集(投稿者)

    空行を使用していれば次のようになります。

    > ヘルプも見ましたけど、ケースはケース終了までとしか書いて無いんです
    > 終了したら何処へ行くのかは書かれていませんね

    ヘルプには次のように何処に行くか書いてあります。

    ・[ケース]コマンドの<条件式>が真であれば、つぎの[ケース]コマンドまたは[ケース終了]コマンドまでのコマンドを実行します。
    ・[ケース]コマンドの<条件式>が偽であれば、つぎの[ケース]コマンドまたは[ケース終了]コマンドに移ります。

    これを読めば、

    [ケース終了]コマンドへ進み、次の行以降に記述されている有効なコマンドが実行されます。

    と理解できるハズです。

    提示された内容からすると、

    │ │ └ケース終了  (1)※[ケース終了]コマンドへ進み
    │ │     ←───(2)ここへ進みます! ただし空行なので注釈同様に何もしません
    │ └end    ←───(3)ここへ進みます! ※[end]コマンドの次の行へ進みます
    │       ←───(4)ここへ進みます! ただし空行なので注釈同様に何もしません
    └繰り返し終了 ←───(5)ここへ進みます! ※無限ループなので[繰り返し]コマンドの次の行へ進みます

     表

    ですね。

    空行があれば、上から順に実行していくという「順次」という流れで、動作の理解が容易になります。


    p.s.

    空行を用いないことに違和感を感じない人は、桐の履歴しか見たことがない人かもしれません。

    桐の履歴には、履歴開始 ... 履歴終了 の範囲に空行がありません。

    これをスタンダード(標準)だと思ったならばとんでもない誤りです。

    なぜならば、桐の履歴は「人間が内容を読む事を考慮していない」からです。

    桐が実行できればよいのですから、空行も注釈行も不要なわけです。

    つまり、空行も注釈行も無いプログラムは、人間が読むプログラムとしては、ちょっとネということです。

    さらにp.s.

    これは潜在意識の問題かもしれませんが、空行があるとプログラムが遅くなると思っている人もいますね。

    確かに、大昔の、それもCP/M や MS-DOS2.11 の頃にはハードウェアが鈍足だったので体感出来たかもしれません。

    しかし、Windowsの時代には、高速なハードウェアが使われているので、もはや空行があるから遅くなるなんてことはあり得ません。

    遅いと感じる場合には、必ず別の原因が存在しています。


引用返信 [メール受信/OFF] 削除キー/
■12583 / inTopicNo.6)  Re[9]: 繰り返し
□投稿者/ ONnoji -(2020/08/13(Thu) 08:43:48)
    気になる点を…

    まず、空行(くうぎょう:空の行)を使うようにしましょう。

    格好だけの字下げ(インデント)よりも、重要だと思いますよ。

    プログラムは文書と同じなので、上から下までビッシリと文字を並べた場合には非常に読みにくいです。

    空行を適当に使うと読みやすくなります。

    空行は、{ 繰り返し,繰り返し終了,if,else,end,ケース開始,ケース,ケース終了}の前後に挿入します。
    ※なお、ケース開始の直後にはケースがくるので空行を挿入する必要はありません。

    そうすることで、制御構造とそれ以外の処理のまとまり(ブロック)が際立ってきます。

    長くなりますが、全文を以下に示します。

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

     変数宣言 共通,文字列{ &いつ,&伝票NO,&借方コード,&借方科目,&借方補助コード,&借方補助科目,&貸方コード,&貸方科目,&貸方補助コード,&貸方補助科目}
     変数宣言 共通,数値{&借方本体金額, &貸方本体金額,&差額金額,&残額}

    ┌繰り返し

    │  表 ”01022-3資金繰仕訳.tbx”
    │  絞り込み  [借方貸方差額]{=0}   /*借方、貸方同じ額のものを選んで*/
    │  **絞り込み  [借方貸方差額]{=0}   /*借方から貸方引いて*/

    │ ┌if (#空ファイル=0)    /*それが空で無いなら*/
    │ │
    │ │  **if (#空ファイル=0)    /*それが0なら*/
    │ │  表 ”01022-4資金繰仕訳.tbx”   /*この表に読み込み*/
    │ │  読み込み条件登録 表,条件名="","01022-3資金繰仕訳.tbx",ファイル名変更=しない,編集表=する,*
    │ │  読み込み 表,条件名=""
    │ │  編集表 ”01022-3資金繰仕訳.tbx”
    │ │  行削除 *             /*読み終えたら要らないのでその分は削除*/
    │ │  絞り込み解除  1     /*最初の状態へ*/
    │ │  表形式編集
    │ │
    │ ├else if (#空ファイル=1) /*差額0が無い空ファイル状態なら*/
    │ │
    │ │  絞り込み解除  1       /*解除で最初の状態へ*/
    │ │  代入 &いつ=[日付変換]
    │ │  代入 &伝票NO=[伝票No.]
    │ │  代入 &差額金額=[借方貸方差額]
    │ │  検索条件登録 "日付伝票",{[日付変換]{&いつ},[伝票No.]{&伝票NO}}
    │ │  絞り込み 条件名="日付伝票"
    │ │  絞り込み 行数=1
    │ │
    │ │ ┌ケース開始
    │ │ ├─ケース (#空ファイル=0)   /*真の空ファイルになったらここで終了*/
    │ │ │
    ←─┼─┼───繰り返し中止
    │ │ │
    │ │ ├─ケース (&差額金額<0)           /*貸方の金額が大きい時は*/
    │ │ │
    │ │ │   代入 &貸方コード=[貸方勘定科目コード]
    │ │ │   代入 &貸方科目=[貸方勘定科目名]
    │ │ │   代入 &貸方補助コード=[貸方補助科目コード]
    │ │ │   代入 &貸方補助科目=[貸方補助科目名]
    │ │ │   代入 &貸方本体金額=[貸方本体金額]
    │ │ │   絞り込み 補集合
    │ │ │   検索 [借方本体金額]{ <>0,<>#U }
    │ │ │   絞り込み 行数=1             /*借方の1行を呼び出し*/
    │ │ │   代入 &借方本体金額=[借方本体金額]
    │ │ │   代入 &残額=&貸方本体金額×-1-&借方本体金額
    │ │ │   置換 [貸方勘定科目コード]=&貸方コード   /*以下、空白になっている行に貸方の同じ値を複写*/
    │ │ │   置換 [貸方勘定科目名]=&貸方科目
    │ │ │   置換 [貸方補助科目コード]=&貸方補助コード
    │ │ │   置換 [貸方補助科目名]=&貸方補助科目
    │ │ │   置換 [貸方本体金額]=&借方本体金額     /*貸方が大きかったので借方の額に合わせる*/
    │ │ │   絞り込み解除  1
    │ │ │   絞り込み解除  1
    │ │ │   置換 [貸方本体金額]=&残額         /*最初の大きかった額から借方分を除いた残額に*/
    │ │ │
    │ │ ├─ケース (&差額金額>=0)           /*以下は貸方と逆のパターン*/
    │ │ │
    │ │ │   代入 &借方コード=[借方勘定科目コード]
    │ │ │   代入 &借方科目=[借方勘定科目名]
    │ │ │   代入 &借方補助コード=[借方補助科目コード]
    │ │ │   代入 &借方補助科目=[借方補助科目名]
    │ │ │   代入 &借方本体金額=[借方本体金額]
    │ │ │   絞り込み 補集合
    │ │ │   検索 [貸方本体金額]{ <>0,<>#U }
    │ │ │   絞り込み 行数=1
    │ │ │   代入 &貸方本体金額=[貸方本体金額]
    │ │ │   代入 &残額=&借方本体金額-&貸方本体金額
    │ │ │   置換 [借方勘定科目コード]=&借方コード
    │ │ │   置換 [借方勘定科目名]=&借方科目
    │ │ │   置換 [借方補助科目コード]=&借方補助コード
    │ │ │   置換 [借方補助科目名]=&借方補助科目
    │ │ │   置換 [借方本体金額]=&貸方本体金額
    │ │ │   絞り込み解除  1
    │ │ │   絞り込み解除  1
    │ │ │   置換 [借方本体金額]=&残額
    │ │ │
    │ │ ├─ケース (#空ファイル=1)         /*貸借が0のものは移動させてるので空になるまで繰り返し*/
    │ │ │
    │ │ └ケース終了
    │ │
    │ └end

    └繰り返し終了

     表


引用返信 [メール受信/OFF] 削除キー/
■12582 / inTopicNo.7)  Re[8]: 繰り返し
□投稿者/ ONnoji -(2020/08/12(Wed) 22:55:38)
    > それで先ほど、ケース終了、end、が繰り返しに戻っていなくて、もしかして何処かに飛んでいるのかな?と思った次第でした。

    [制御文]=[構造化]コマンドを正確に理解していないのが原因で、そのような疑問が生じていると思います。

    別途、投稿しましたので詳しくはそちらを読んでください。



引用返信 [メール受信/OFF] 削除キー/
■12581 / inTopicNo.8)  Re[7]: 繰り返し
□投稿者/ hiro -(2020/08/12(Wed) 22:27:57)
    ONnojiさん、どうもありがとうございます
    1のパターンです、他の変数も共通の数値や文字列です。
    会話処理の変数管理の共通変数で見た時に、名前だけはあるのに値が未定義なので
    それで先ほど、ケース終了、end、が繰り返しに戻っていなくて、もしかして何処かに飛んでいるのかな?と思った次第でした。
引用返信 [メール受信/OFF] 削除キー/
■12580 / inTopicNo.9)  Re[1]: 繰り返し
□投稿者/ ONnoji -(2020/08/12(Wed) 22:27:04)
    2020/08/14(Fri) 13:33:59 編集(投稿者)
    2020/08/13(Thu) 00:06:31 編集(投稿者)

    改めて投稿しましょう。

    > (只、繰り返しとケースの間に、if endも有りました(;^ω^)ややこしい)

    プログラムとは「ややこしい」ものなのです。

    何故ならば、ソフトウェアは「柔らかな機械」だからです。※その反対がハードウェア「硬い機械」です。

    機械である以上、ネジの一本一本、寸法の間違えなど許されないのです。

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    プログラムの制御構造を正しく理解していない場合には、プログラムを作成できません。

    これは世の中で言うところの「構造化プログラミング」というものです。

    しかしながら、DOS桐で[分岐]コマンド[名札]コマンドが普通の使われていたように、

    現在でも、桐のヘルプではDOS桐の流れのままに、「構造化プログラミング」をそれほど強く押し出していません。

    DOS桐の利用者の多くは、当時のBASIC同様に、分岐(GOTO)や名札(LABEL)でプログラムしていたのですが、現在ではそれが仇になります。
    ※少数の桐の利用者は、手続き実行(GOSUB)...手続き終了(RETURN)を使っていましたけれども、多数派ではありませんでした。
    ※ちなみに、DOS桐には、if ... else ... end が無かったんですよ。
    ※そのために、[ケース開始] ... [ケース 条件] ... [ケース その他] ... [ケース終了] が if ... else .. end の代用だったりしました。
    ※else節を含まないif ... end は[繰り返し 条件] ... [繰り返し中止]+[繰り返し終了]で実現できます。
    ※ これを私は非常によく利用していましたが、このようなコーディングをした人は極めて少ないハズです。

    さて現在では、Win桐も普通に構造化プログラミング言語の仲間入りをしているんです。

    しかしながら、世の中で言うところの「構造化プログラミング」は最近では耳にしなくなっています。

    なぜならば、「構造化プログラミング」はあまりにも当ったり前の常識になっているからです。※当たり前田のクラッカー!のレベルです。

    例えば、昔であれば新人プログラマ研修で「構造化プログラミング」をみっちり教え込みましたが、

    現在では、サッと紹介して、オブジェクト指向プログラミング等へ進みます。

    それくらい、当ったり前の、常識の知識になってしまっているということです。

    しかしながら、DOS桐からの利用者は、世の中で言うところの「構造化プログラミング」を知らない人が多いです。

    今回はそこがネックであると断言しますよ。

    世の中で言うところの「構造化プログラミング」を理解できないとゴールは遠くなるハズですよ。


引用返信 [メール受信/OFF] 削除キー/
■12579 / inTopicNo.10)  Re[6]: 繰り返し
□投稿者/ ONnoji -(2020/08/12(Wed) 22:15:46)
    2020/08/12(Wed) 22:18:19 編集(投稿者)

    > 推察通りでした、只、繰り返しの次の行に、教えて頂いた&cot=&cot+1を書いてるのに
    > 変数管理で見ても、数値が未定義のままになっています(;^ω^)他の共通変数は値が入っているのに・・・

    変数:&cnt をどのように宣言しましたか?

    1.変数宣言 共通,数値{ &cnt }

    2.変数宣言 固有,数値{ &cnt }

    3.変数宣言 数値{ &cnt }


    1.の場合のスコープは共通変数です。

    2.と3.の場合のスコープは固有変数です。

    変数に関しては、桐のヘルプ(変数宣言)と

    拙作HP

    http://silicon7565.html.xdomain.jp/
    フォームアプリケーション教書 第1部
    17. 名札メインと局所変数

    を参照してください。

    【引用】フォームアプリケーション教書 第1部 17. 名札メインと局所変数より

    ― 変数の種別とスコープ 2006/4/19(水) ― ブログ版 桐のイベント道場より
      各種別で同じ名前の変数を宣言した場合、次の順番で検索され、最初に見つかった変数の値が参照されます。

      自動
      局所
      固有
      共通
      ※組み込み変数と同名の変数は宣言できません。

      スコープの異なる同名の変数の有効範囲は以下のようになる。├──┤有効範囲を広さを表す。

      ├─自動─┤   この変数は宣言した手続き内でのみ有効です。手続きから抜けると自動的に削除されます。
      ├─局所──┤  この変数は、フォームウィンドウ固有ものです。フォームウィンドウが閉じると自動的に削除されます。
      ├─固有───┤ この変数は、表またはフォームのウィンドウが開いているあいだだけ有効です。
      ├─共通────┤この変数は、桐で作業している間はつねに有効です。

      <置換式の特殊性>
      置換式に指定した変数は[組み込み変数]または[共通変数]または[固有変数]でなければならない!
      表( .tbl )が項目計算式などで参照できる変数が、組み込み変数や共通変数や固有変数だけということが原因だと思います。
      筆者注:置換式がアンダーバー( _ )で指定する式の場合には式に用いる変数は局所変数や自動変数でもよい。
          ただし、式の中で局所変数や自動変数を表現するとエラーになります。

引用返信 [メール受信/OFF] 削除キー/
■12578 / inTopicNo.11)  Re[5]: 繰り返し
□投稿者/ hiro -(2020/08/12(Wed) 22:04:55)
    ONnojiさん、どうもありがとうございます
    推察通りでした、只、繰り返しの次の行に、教えて頂いた&cot=&cot+1を書いてるのに
    変数管理で見ても、数値が未定義のままになっています(;^ω^)他の共通変数は値が入っているのに・・・
引用返信 [メール受信/OFF] 削除キー/
■12577 / inTopicNo.12)  Re[4]: 繰り返し
□投稿者/ ONnoji -(2020/08/12(Wed) 21:47:49)
    2020/08/12(Wed) 22:40:56 編集(投稿者)
    2020/08/12(Wed) 22:08:14 編集(投稿者)

    > トレースはトレース整形しても、メモ帳に張り付けたものと同じ物しか
    > 出来上がらないんですよね(;^ω^)

    当方は、イベント処理を念頭に置いていまして、一括処理の場合は想定外であります。(^^ゞ

    しかし、それでも[トレース確認]コマンドや[確認]コマンドに比べれば、ましでしょう。

    > ヘルプも見ましたけど、ケースはケース終了までとしか書いて無いんです
    > 終了したら何処へ行くのかは書かれていませんね

    ヘルプには次のように何処に行くか書いてあります。

    ・[ケース]コマンドの<条件式>が真であれば、つぎの[ケース]コマンドまたは[ケース終了]コマンドまでのコマンドを実行します。
    ・[ケース]コマンドの<条件式>が偽であれば、つぎの[ケース]コマンドまたは[ケース終了]コマンドに移ります。

    これを読めば、

    [ケース終了]コマンドへ進み、次の行以降に記述されている有効なコマンドが実行されます。

    と理解できるハズです。

    提示された内容からすると、

    │ │ └ケース終了         ※[ケース終了]コマンドへ進み
    │ └end ←───── つまりここ! ※次の行以降に記述されている有効なコマンドが実行されます
    └繰り返し終了
     表

    ですね。


引用返信 [メール受信/OFF] 削除キー/
■12575 / inTopicNo.13)  Re[3]: 繰り返し
□投稿者/ hiro -(2020/08/12(Wed) 21:29:51)
    ONnojiさん、どうもありがとうございます
    トレースはトレース整形しても、メモ帳に張り付けたものと同じ物しか
    出来上がらないんですよね(;^ω^)
    ヘルプも見ましたけど、ケースはケース終了までとしか書いて無いんです
    終了したら何処へ行くのかは書かれていませんね
    結局、繰り返しは繰り返し終了まで、ケース開始はケース終了までと言う事だと
    思いますが、推察しますと、ケース終了がもしケース開始の次へとなると自動的に繰り返しをしている事になってしまうからケース開始ではないだろうなと考えました。
    (只、繰り返しとケースの間に、if endも有りました(;^ω^)ややこしい)


引用返信 [メール受信/OFF] 削除キー/
■12574 / inTopicNo.14)  Re[2]: 繰り返し
□投稿者/ ONnoji -(2020/08/12(Wed) 21:00:18)
    2020/08/13(Thu) 09:46:10 編集(投稿者)
    2020/08/12(Wed) 21:29:36 編集(投稿者)
    2020/08/12(Wed) 21:06:29 編集(投稿者)

    > 繰り返しの下にケース開始が有り
    > 合致するケース処理が終わったら
    > 繰り返しの次の行に飛ぶのか?
    > ケース開始の次の行に飛ぶのか?
    > どちらでしょうか?

    [トレース出力]コマンド等を使って自身で確認してください。

    こういうことは、自分自身で確認できるようにならないといけません。

    先はまだまだ遠いですよ。

    p.s.

    > 合致するケース処理が終わったら

    [ケース終了]コマンドへ進み、次の行以降に記述されている有効なコマンドが実行されます。
                   ※コメント行と空行も実行対象ですが、それらは何も実行しない行です。

    それが、何であるかは、プログラムのデザイン次第です。

    ヘルプの[ケース開始 … ケース終了]をよ〜く読んでください。φ(..)

    疑問が生じたら、まずヘルプを見ましょう。

    そして、それでも疑問がある場合には、具体的に質問を投稿しましょう。

    取扱説明書であるヘルプすら見ずに質問するのは、ちょっとだと思いますよ。



引用返信 [メール受信/OFF] 削除キー/
■12573 / inTopicNo.15)  Re[1]: 繰り返し
□投稿者/ hiro -(2020/08/12(Wed) 20:42:36)
    繰り返しの下にケース開始が有り
    合致するケース処理が終わったら
    繰り返しの次の行に飛ぶのか?
    ケース開始の次の行に飛ぶのか?
    どちらでしょうか?
    よろしくお願い致します。
引用返信 [メール受信/OFF] 削除キー/
■12572 / inTopicNo.16)  Re[3]: 記述の局部的添削プラスアルファ
□投稿者/ hiro -(2020/08/12(Wed) 19:38:51)
    No12568に返信(hiroさんの記事)
    悲しげさん、どうもありがとうございます。
    >「#空ファイル=0」ってのは初めて見ました。何だか「無が有」「無が無」みたいで斬新です。
    #空ファイル=0,#終端行=0,#総件数<>0,どれもデータがある状態で、気分で使ってます
    厳密には使い分けるのが良いのでしょうけど、その区別は分かりません(;^ω^)

    >  *(B)絞り込み 条件名="日付伝票"
    >  絞り込み 行数=1
    >ここで何をやっているのか判らない。
    複式簿記の場合、金額が大きかったら残りの行は空白なので複写する為
    例えば
     1行目       普通預金700,000
    2行目買掛金400,000
    3行目未払金300,000
    4行目買掛金300,000 当座預金300,000
    とかですと、2〜3行目は貸方が空白なので、1行目をコピーし
    2行目買掛金400,000 普通預金400,000
    3行目未払金300,000 普通預金300,000
    に変更しようとしているためです
    (今は並び替えて金額が大きい数字が先頭に来るようにしています)
    (金額が同じものは1行内に記入され、金額が違う物は反対が空白です)
    >「*(B)」の記述は不要のはず?
    伝票毎に処理する為、伝票内での金額の分解が必要なのです

    >ははぁ、置換を使うために苦しい1行絞り込みを行っていたのですね。
    そうです、上記例えで言いますと
    2行目買掛金400,000 普通預金400,000とする為です


    >  繰り返し
    >   &借方本体金額=[借方本体金額],&残額=-&借方本体金額-&貸方本体金額
    >   行訂正 [貸方勘定科目コード]=&貸方コード,[貸方勘定科目名]=&貸方科目・・・・
    >   *借方の記述は略
    >   ジャンプ 行番号=次行
    次行は借方金額が違うので、借方の額を貸方と同じになるのかが気になりました
    (複数行が混在していますので)

引用返信 [メール受信/OFF] 削除キー/
■12569 / inTopicNo.17)  (削除)
□投稿者/ -(2020/08/12(Wed) 19:24:29)
    この記事は(投稿者)削除されました
引用返信 [メール受信/OFF] 削除キー/
■12568 / inTopicNo.18)  Re[2]: 記述の局部的添削プラスアルファ
□投稿者/ hiro -(2020/08/12(Wed) 19:15:24)
    悲しげさん、どうもありがとうございます。
    > 「#空ファイル=0」ってのは初めて見ました。何だか「無が有」「無が無」みたいで斬新です。
    #空ファイル=0,#終端行=0,#総件数<>0,どれもデータがある状態で、気分で使ってます
    厳密には使い分けるのが良いのでしょうけど、その区別は分かりません(;^ω^)

    >   *(B)絞り込み 条件名="日付伝票"
    >   絞り込み 行数=1
    > ここで何をやっているのか判らない。
    複式簿記の場合、金額が大きかったら残りの行は空白なので複写する為
    例えば
    1行目       普通預金700,000
    2行目買掛金400,000
    3行目未払金300,000
    4行目買掛金300,000 当座預金300,000
    とかですと、2〜3行目は貸方が空白なので、1行目をコピーし
    2行目買掛金400,000 普通預金400,000
    3行目未払金300,000 普通預金300,000
    に変更しようとしているためです
    (今は並び替えて金額が大きい数字が先頭に来るようにしています)

    >「*(B)」の記述は不要のはず?
    伝票毎に処理する為、伝票内での金額の分解が必要なのです

    > ははぁ、置換を使うために苦しい1行絞り込みを行っていたのですね。
    そうです、上記例えで言いますと
    2行目買掛金400,000 普通預金400,000とする為です


    >   繰り返し
    >    &借方本体金額=[借方本体金額],&残額=-&借方本体金額-&貸方本体金額
    >    行訂正 [貸方勘定科目コード]=&貸方コード,[貸方勘定科目名]=&貸方科目・・・・
    >    *借方の記述は略
    >    ジャンプ 行番号=次行
    次行は借方金額が違うので、借方の額を貸方と同じになるのかが気になりました
    (複数行が混在していますので)

引用返信 [メール受信/OFF] 削除キー/
■12566 / inTopicNo.19)  記述の局部的添削プラスアルファ
□投稿者/ 悲しげ -(2020/08/12(Wed) 18:23:42)
    No12547に返信(hiroさんの記事)
    全体構造は置いといて、一括処理記述の局部的添削を試みてみます。(^^;)

    「#空ファイル=0」ってのは初めて見ました。何だか「無が有」「無が無」みたいで斬新です。
    私は直感的に「&選択件数>0」とか「#総件数>0」を使ってきたので。
    さて

    繰り返し
     表 "01022-3資金繰仕訳.tbx"
     絞り込み  [借方金額]=[貸方金額]
     if(&選択件数>0)    /*それが空で無いなら*/
      表 "01022-4資金繰仕訳.tbx"   /*この表に読み込み*/  
      読み込み 表,"01022-3資金繰仕訳.tbx",*
      編集表 "01022-3資金繰仕訳.tbx"
      行削除 *  /*読み終えたら要らないのでその分は削除、つまり[借方金額]=[貸方金額]の行を消す*/
      絞り込み解除 1     /*最初の状態へ、つまり[借方金額]<>[貸方金額]の行を表示する*/
      *表形式編集
     else /*差額0が無い、つまり[借方金額]<>[貸方金額]のデータだけ*/
      絞り込み解除 1  /*解除で最初の状態へ、つまりは先頭行*/
      *(A)
      *(B)&いつ=[日付変換],&伝票NO=[伝票No.],&差額金額=[借方貸方差額]
    **「代入」の字句は省略可なので、見通しをよくするため抜いている。以下同様。
      *(B)検索条件登録 "日付伝票",{[日付変換]{&いつ},[伝票No.]{&伝票NO}}
      *(B)絞り込み 条件名="日付伝票"
      絞り込み 行数=1
    ここで何をやっているのか判らない。
    解除後は先頭行に位置するはずだが、先頭行の幾つかの項目値を変数に取得し、
    その変数値でもって絞り込んで、その先頭行1行を絞り込む。これってつまりは
    元の先頭行1行を絞り込むのと同じだから「*(B)」の記述は不要のはず?
    と言うか、そもそもここで1行を絞り込むのは何のため?
      ケース開始
      *ケース (#空ファイル=0)   /*真の空ファイルになったらここで終了*/
      * 繰り返し中止
    ここは「#空ファイル=1」の誤記とのことで、ならば上記「*(A)」の辺りで
      条件(&選択件数=0) 繰り返し中止
    とした方がすっきりするような・・・。
      ケース (&差額金額<0)           /*貸方の金額が大きい時は*/
      *または([貸方金額]>[借方金額])でもよいが
       &貸方コード=[貸方勘定科目コード],&貸方科目=[貸方勘定科目名]\n
       ,&貸方補助コード=[貸方補助科目コード],&貸方補助科目=[貸方補助科目名]\n
       ,&貸方本体金額=[貸方本体金額]
       絞り込み 補集合
    なぜ補集合? 先に1行目だけを絞り込んでいるから、補集合では2行目以降全てが対象になる?
    尤もその前に[日付]と[伝番]で絞り込んでいるから全補集合ではなさそうだが、となると1行目
    を対象外とするのは?
       検索 [借方本体金額]{ <>0,<>#U }
       絞り込み 行数=1             /*借方の1行を呼び出し*/
       &借方本体金額=[借方本体金額],&残額=-&借方本体金額-&貸方本体金額
       置換 [貸方勘定科目コード]=&貸方コード,[貸方勘定科目名]=&貸方科目\n
       ,[貸方補助科目コード]=&貸方補助コード,[貸方補助科目名]=&貸方補助科目\n
       ,[貸方本体金額]=&借方本体金額   /*貸方が大きかったので借方の額に合わせる*/
    ははぁ、置換を使うために苦しい1行絞り込みを行っていたのですね。
    ここは全行対象の「置換」ではなく、当該1行のみを対象とする「行訂正」がよいでしょう。
       絞り込み解除  1
       絞り込み解除  1
       置換 [貸方本体金額]=&残額         /*最初の大きかった額から借方分を除いた残額に*/
    この辺りの記述の意図は判りかねるが、その辺はパスして(^^;)、
    一般に「置換」ではなく各行を「行訂正」して行く定石的記述を例示すると
      繰り返し
       &借方本体金額=[借方本体金額],&残額=-&借方本体金額-&貸方本体金額
       行訂正 [貸方勘定科目コード]=&貸方コード,[貸方勘定科目名]=&貸方科目・・・・
       *借方の記述は略
       ジャンプ 行番号=次行
       条件(#終端行) 繰り返し中止
      繰り返し終了
    これだと、絞り込み〜解除の煩雑さから逃れることが出来ます。(^^)v

    *

    余談ながら、そもそも本件は、複合仕訳や諸口仕訳を単一仕訳に振り替える問題ですよね。
    これって桐での複式簿記全般の話題だから、経験者にお知恵を拝借したらどうでしょう?
    今回のエラー原因の探索とは離れて。
    私が自営=会計業務から離れて15年以上たつのでもうすっかり忘れてしまったし。
    尤も私の場合は入力は専ら「弥生」で、結果をテクストやCSVで書き出して桐で処理=印刷
    していただけでしたが。
引用返信 [メール受信/OFF] 削除キー/
■12554 / inTopicNo.20)  Re[7]: 繰り返し
□投稿者/ hiro -(2020/08/11(Tue) 19:54:21)
    トレースは開始しました、1508エラー、ctrl+break、終わりましたの2行で終わってしまうので、表形式編集を所々に入れて見ると、
         代入 &貸方コード=[貸方勘定科目コード]
         代入 &貸方科目=[貸方勘定科目名]
         代入 &貸方補助コード=[貸方補助科目コード]
         代入 &貸方補助科目=[貸方補助科目名]
    の所で値が代入されていない事が分かりました。

    つづく
引用返信 [メール受信/OFF] 削除キー/

次の20件>

トピック内ページ移動 / << 0 | 1 >>
Mode/  Pass/

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

- Child Tree -
- Antispam Version -