====================  WeekCLN用積算ファイル  作成バッチ ver0.9911  CopyRight Miyama. 2024 March  ver0.991  reedmeの修正    2024 April  ver0.9911  KazutomiMiyamaSub@gmail.com  kazutomi.html.xdomain.jp ====================  これは拙作簡易家計簿ソフト  weelcln用のデータ積算プログラムです。  本体プログラムの至らない部分の一つとし てデータのメンテナンス機能が脆弱なことが あります。  データ操作を本体プログラムだけで行って いる場合には問題ありませんが、  しかし中級者氏に置かれまして、dosコマ ンドなどを使用してディレクトリに格納して いるデータファイルを操作しようとすると面 倒な事態が生じます。  プログラムの機能として日記コメント欄と 支出データの内容をすべて結合して出力ファ イルを作成する機能があるのですが、  これは、  システム手帳風の画面を開き、また閉じた ときに保存される、週ごとの中間ファイルを、 プログラム終了時にすべて自動連結する機能 に依っています。  しかし筆者の事例では、  データ更新の都合上、  週ごとの中間ファイルを一度delコマンド などによって全部削除し、  新規に日ごとの細かいデータを更新したの ちに、  全データの結合を望みましたが、  当然本体プログラムの仕様ではもちろん、  データ数年分にもわたる週間画面をすべて 開かなければ中間ファイルを作成できないこ とになります。  当初の設計仕様に配慮が足りなかったとい えばそれまでですが、  当時のこのソフトの構想はできるかどうか わからなかった巨大な山塊であり、  また、事実上手弁当の労力で仕上げるしか なかったということを、  言い訳としてご容赦頂くしかありません。  またこのプログラムは内部が緻密にできて いるので、発生するあらたな不具合を考える と内部をあらためて改良する気持ちにはなら ないのが本音です。      *  そこで、このような不都合を部分的に回避 するために外部ツールを作成することにしま した。  労力も避けないので、大掛かりな開発環境 で作ったツールではありません。(避けなか ったはずですが・・・後述参照:苦笑)  イメージとしては乱暴ですが、  たとえばむかしのtipsとして、  dosのcopyコマンドなどを使えば、複数テ キストの一括結合などは比較的簡単に行えま す。  copy *.txt > sum.tmp  notepad sum.tmp  とすれば、一覧ファイルを作成閲覧するこ とができます。  発想として、今回筆者も同様に考え、  研鑽もかねて、dosのバッチとしてどこま でできるのか作ってみることにしました。  注記:ただしdosシェルの環境にはもとも と変数や演算という発想が乏しいらしいので、 文字列としての数字を拾い上げて合算積算す る機能は実用的な意味では、なかったと想い ます。  ゆえにこのツールも支出ファイルの金額を 日ごとに合算して再格納する機能は装備して いません。  本体プログラムのそれと同じく、  表計算ソフトで開けるcsvデータファイル として出力されますが、  上記の理由により日ごと、週ごとなどの合 算積算のセル項目はありません。  合計が必要な場合はそれぞれ合計用のセル にsum関数を書き込む必要があります。  結果、なんとか完成できました。  動作環境:  win10動作確認済み、win11でも動作するは ずです。  XPを含む古いシステムでは仕様により使え ません。  使用条件:  フリーウェアです。  使用・配布は自由です。  免責・注意事項:  動作batファイルを絶対に編集しないでく ださい。dosシェルコマンドには危険なもの もあり、システムに回復不可能なデータの削 除をもたらすものもあります。  作者はあらゆる不具合・不都合に一切の責 任を負いません。  使用方法:  アーカイブファイル  wstake01.zip  デスクトップなどに適当なフォルダを作り、 アーカイブを解凍してください。  アーカイブの内容  MasterStart.bat 出力の日付範囲を指定 できる上位マネージャです。普通はこちらを 使ってください。  MakeStakeDAY.bat 日記コメントの総合ファイルを出力します  MakeStakePAY.bat 支出ファイルの総合ファイルを出力します  以下はサブプロセスのバッチ内容です。  クリックしても動作しません。  LineContentsCHK.$$$  CHKsub.$$$  openCSV.bat 支出出力のファイルをメモ 帳で開きます。表計算ソフトのない環境での 内容確認にご使用ください。  このバッチは拙作本体プログラムの作業デ ィレクトリ、  c:\daily_folder  の内容をコピーしたディレクトリを作り、 そのデータに対して積算動作を行います。  これはデータ保全のための仕様です。  処理が終了するとバッチファイルがあるフ ォルダに積算ファイルが作成されます。  日記コメント output.txt  支出ファイル output.csv  おおげさなツールではないので特殊な名前 は付けませんでした。  多重動作による上書きを防ぐため、この内 容を編集する場合には必ず別名保存をしてく ださい。  操作詳細:  MasterStart.batをクリックして起動しま す。  メモ帳で日付範囲設定の画面が開きます。  表示されるサンプルは、2023年11月のみの データを出力するものとなっています。  CallDAYPAY.bat 以下の数字を書き換えれ         ↑必ず空白 ば範囲を指定することができます。  ※範囲指定はかならずしも自在ではありま せん。  例:  202311 2023年11月のすべて  2023111 11月の10日から19日まで  2023 その年全部  空白 記録データ全部  アルファベットのコマンド文字は絶対に書 き換えないでください。作者はいかなる不具 合に対しても一切の責任を負いません。  メモ帳をctrl+sで保存して閉じ、  黒い画面(dosシェル)に表示されている 「続行するにはなにかキーを押してください」  に対して、任意のキーを押し下すと処理が 始まります。  動作中であることがわかるように、処理プ ロセスは表示が流れるままにしてあります。  空白指定、あるいはMakeStakeDAY/PAY.bat を直接クリックすると、論理はすべてのデー タの結合を試みます。  数年分のデータなら2メガ程度のファイル になります。  支出データの結合動作は、表計算ソフトの セルのインデントをそろえるために、すべて のデータ行を精査するので時間がかかります。 十分以上かかる場合もあるかもしれません。  黒い画面が閉じれば処理終了です。  動作フォルダに  output.txt/csv  が作成されているはずです。  注記  重厚なバージョンのexcelではcsvファイル を素直に開くことができません。  オンラインのフリーの表計算ソフトの方が 使いやすいこともあります。  単なる内容確認であれば  OpenCSV.bat  をクリックすればoutput.csvを表示できま す(メモ帳)。  謝辞  オンライン上で、多くの方がヒントを記述 していてくれたおかげでこのツールを完成さ せることができました。伏して感謝いたしま す。 ====================  個人の感想およびレポート ====================  時系列では、  遅延展開  表示文字セット  バッチにおけるデータベース書式の慣習?  データ連携における特殊文字の扱い  の順で「蹉跌」に出会いました。  dosシェルは青山ばかりです。  ※以下の感想コメントはその逆の順番にな っています。  dosシェルのぬかるみについて、オンライ ン上でおおくの方が愚痴を述べておられまし たが、その内容をあえて強調してみると、

 業務でdosシェルの仕事はするな!  それしかもらえないなら仕事をやめろ!  自殺するはめになるぞ!!

(苦笑)かならずしも冗談ではないことが苦 々しいことです。  労務の仕事での労災はフィジカルな大けが なのでわかりやすいですが、理系やデスクワ ークの労働災害は自殺なのかもしれません。 官僚が入居するビルはときどき若者が降って くるそうです。霞が関を歩くときは注意しま しょう。  ・・・確かに癖のある環境でした。  IT土方、という悪い言葉がありますが、コ ンピュータの仕事も場合によっては、いわゆ るブラック業態に陥り、  現場の実務としてコードを書くコーダーは、 ときには使い捨ての安い労務者と同じ意味を 持つことがあります。  場合によっては家主が部屋を貸してくれな いかもしれません。自殺するので事故物件に なってしまうから、とかなんとか。  業界では、発注する側のデザイナーやプラ ンナーでない限り(企画(株)はたいてい山 師)、たとえば投資家からみて投資の対象に はならないという現実がありうるのは想像で きることです。  もし発注する側が現場の現実を知らない、 現場の経験者ではない場合には、その構図は 搾取の色彩に染まることになります。  社長がパチンコや投機に狂っている会社は ろくなものではありません。仕事に愛着がな いからこそ、発想がバイアスにむかわざるを 得ないのでしょう。経験と愛着は相関します。  悪賢さと、誠実→卑屈、の中庸というもの は、ギリシアの昔から難しいところですが、  それが仕事である以上、プログラマといえ ど仕事を選ぶ、ことができるかどうかという ことは、  必要なスキルではあるのでしょう、  つまり具体的には、蓄積として  経験と貯金:耳が痛い:ということです。  努力からの経験が、不毛にかしずいてはい けませんし、  皆が断った価格的にも安い、買いたたかれ の案件に、思慮もなく喜ぶのは大人の態度で はありません。  上記のふたつは、同じことです。  不毛や被搾取からは、利益を引き出せませ ん。  世間の広義、たいていのブラックとは経営 の怠慢からくる破綻です。  ゾンビ企業は整理されるべきなのが、理念 ・理論上の資本主義です。  生物学にも通じるシステム論の意味では、 高齢になって組織や細胞に老化が蓄積し、も はや事実上治療や修復が不能になったところ が、企業や個人の寿命ということになります。  それよりは新しい世代に希望を託す、とい うのが、  かつて多細胞の動物の歴史がとった一つの 戦略であり、  それは企業やシステムにおけるスクラッチ ・ビルドの理念でもあります。  つぎはぎ・行き当たりばったりの拡張だら けが運営上まずいのは、建物もシステムもお なじことです。  老朽化に対する複数の修復の積算のコスト よりも、  すべての鉄骨を入れ替える、新規の建て替 えのほうが結局は安くつく。  信長の生涯に通じるものがあります。      *  生物学のたとえを繰り返せば、  老朽化した不毛な業務が存続しなおかつ労 働力がそのなかに取り込まれているという構 図は、  既得権にあぐらをかいている老人が、  貧乏な子供の腹をさばいて臓器を取り出し ている構図と力学的にはおなじことです。  退場すべき老害がのさばり、若い世代を圧 迫するということは高齢化社会の一面ではあ るのでしょう。  悪い意味での封建制は意志薄弱になった老 人の害からはじまる面もあります。中国の歴 史では親を殺すことは罪ですが、子供を殺す ことはかならずしも罪ではありませんでした。 クロノスが子供を飲み込んでいたのは、高齢 からの怯惰心にも見えます。  圧力として老害を追放するという意味では、  勤勉は広義の、薄い革命と同じ意味を持ち ます。PrivateWarsというのは生活と労働の 理念です。  その意味で、ゲームばかりしていると上記 の意味で敵である「老害」にいきたまま屠ら れることになります。たいていのゲームは世 界観があまりにも単純なので、戦うための教 養にはなりません。  現実の世界の、砂漠地帯の貧しい字では 「いきぎも」を抜かれた児童の遺骸が捨てら れ、蛆にまみれているそうです。南無。  サマルカンドの例をだすまでもなく、中央 アジアはむかしからそういう土地でした。 「脳はいらない、腎臓をくれ」  という状況というのは、  その社会が精神というものを必要としない、 またその敗北というものを意味しています。  怠惰や腐敗というものは、われわれがただ の哺乳類に過ぎないという、いわゆる畜生道 の現実に世相を引きずり降ろすもののようで す。  ・・・せいぜい、頑張りましょう。 ====================  ・データ連携における特殊文字の扱い  具体例で表現すると、支出データで次のよ うなものがありました。 JR切符/東京>新橋,150 (円)  これをforコマンドの一行ずつのファイル 読み込み機能によって、メモリ変数に格納 しそれをechoコマンドのリダイレクション によって「tmpファイルに格納するプロセス を目論んでいたのですが、 echo %%a> tmp.tmp  これに上記の文字列を読み込んで当て込 むと、 echo JR切符/東京>新橋,150> tmp.tmp  と展開され、  これはもちろん二重のリダイレクション 表記になりますので、 「新橋」という拡張子なしのテキスト形式 ファイルが作成され、  ここに行の内容が格納されてしまいまし た。  それも仕様によって奇妙な挙動をし、 「新橋」ファイルの内容は JR切符/東京,150  という内容になりました。つまり、 リダイレクトされるファイル名 ↓ echo JR切符/東京>新橋,150>tmp.tmp ^^^^^^^^^^^ ^^^^↑ ↑ ↑ 以下無視 格納 格納  という解釈挙動になります。  リダイレクトファイル名の後ろの文字列ま で格納されるとはしりませんでした。  支出記事の都合では、ここは半角ブラケッ トである必要はないので、昨日で別の文字に 置換すればいいのですが、setコマンド記述 のなかでもこの文字はリダイレクトの意味を 持ってしまいます。  対策には、キャレット(サーカムフレック ス)^によるメタ文字無効化を用いることが 出来ました。 (メタ文字やその無効化文字には、コマンド ツールによって違いがあります。^はsedでは 文字列先頭を意味します。)  対策は、一行ずつのfor読み込みループ内 で置換処理をします。  要点だけのサンプルをここに記述すると、 注:思い出して書いています。厳密に検証し ていません。  対応前 setlocal EnableDelayedExpansion for /f "delims=" %%e in (FILE) do ( echo %%e> tmp.tmp )  対応後 setlocal EnableDelayedExpansion for /f "delims=" %%e in (FILE) do ( set ee=%%e set ee=!ee:^>=>! echo !ee!> tmp.tmp )  これで、コマンドライン上は意味を持たな い全角のブラケットに変換することができま す。  ループの中には遅延展開(よくわからない、 わかりたくもない)という現象があるので引 用符にはエクスクラメーションを用います。  余談:なぜexクラムationというのか知り ませんが、これは”クラム”というものがび っくりするからなのだろうかと思っています。 クラムチャウダーというのは二枚貝の雑炊で す・・・。  お湯の中でアサリやハマグリが、びっくり して開くところから来ているのかなと。  多分違いますね。  生活は殺生という意味で戦いです。南無。  ・バッチにおけるデータベース書式の慣習?  支出ファイルは細かい日ごとデータもカン マ区切りcsv形式で記述しているのですが、 これをforコマンドで一行ずつ読み込むと半 角カンマでデータが切れてしまうことに早期 に気が付きました。  以下、筆者の勘違いかもしれません。  デリミタの設定は"delims="記述で定義で きますが、半角カンマだけはもともとの根本 仕様として、強固にデリミタとして定義され てしまっているようです。  オンライン上の記事をみるかぎり、解除す る方法はないようです。  データテーブルとしては、  data1 + , + data2  として改めて文字列に半角カンマを挿入す れば事足りますので、token記述を操作し、 そのように実装しました。  そこでは  %%e,%%f  のように代入しています。  カンマが有無を言わさないデリミタとして 設定されているのは推測ですが、これはまだ windowsなどなかった時代に、  3270など、dosがメインフレームやミニコ ンのダム端末のようなポジションであったこ ろのなごりなのでしょう。  保険会社の入力嬢(おおむね30歳過ぎ。 いろんな意味で油ののりきったお姉さんが多 かったような・・・いい匂いでした。)  がだかだかだか入力していたころです。  ・表示文字セット  過去、直に拙作の作業フォルダの内容を編 集したときに想ったことでもありますが、  dosシェルの中の表示文字セット環境と、  win10デフォルトの表示文字設定は異なり ます。  dosシェルのほうは、シフトJISで、  win10のフォルダシステムはUTF-8になって います。  ですから、開発環境のVB2017も設定を変更 しない限りテキストデータの入出力はUTF-8 の文字セットになるようです。  このバッチは、特に支出ファイルの結合に おいて、個々のテキストファイルを拾い上げ て、切り刻んで処理し再結合する論理に依っ ています。  当初、なにも文字設定をしない状態で動作 させたところ、UTF-8の文字を無理やりシフ トJISで表示させるわけですから、  データが表示に置いて文字化けするのはも ちろんのこと、  文字化けに際して全角2バイトと半角1バ イトが混乱混在することとなり、  処理上のデリミタである、テクニカルキャ ラクタが消えたり変なところに現れたりして 処理が混乱し、もくろんだ通りの動作を完遂 することができませんでした。  調べたところ、dosシェルの表示文字セッ トを変更するコマンドがあるとのこと、それ を使用しdosシェルの表示設定をUTF-8に指定 したところ、  何事もなかったように、動作が正常終了す るのを確認できました。  なんでこんな出荷仕様になっているのか、 考えてみたところ、  UTF-8でのコマンドの呼び出しヘルプはす べて英文で、  現時点ではUTF-8環境でのヘルプの日本語 化はなされておらず、またおそらくは将来に わたってもその予定はないのかもしれません。 (しかし現実、ヘルプが日本語でないと困る でしょうから、日本語版windowsのdosシェル はシフトJISの「まま」になっているのだと 想います。)  なぜそうなのかは、下世話な憶測ですが、  営利事業として、それをする予算がないの かもしれません。  dosシェルはレガシーな遺産であり、ネッ トコマンドやメインフレームとのやり取りの 需要があるからこそ削除されずに残っている だけの存在だから?なのかもしれません。  社員の給与を払うために、必要もないバー ジョンアップをくりかえせねばならぬシシホ スの悪夢はIT業界の常ですが、  そのようなユーザの生活と精神を破壊する ファッションやゲームとおなじ意味でシステ ムを意味もなく極彩色に、 (パソコンのプラスチックのボディに何色も のラインナップが存在することは、道具とし ての本質からは比較的どうでもいいことです)  塗りたくらねばならない営利事業という意 味では、  UTF-8上のコマンドヘルプを日本語化する という発想は、ビジネス上、実現不可能なの かもしれません。 (ヒッピーのファッションであるという面に 限れば、パソコンやネットの売り方は麻薬の それに準拠しなくてはならない、というのは 想像に易きことです。  電話のただ掛けが平気という意味では、た しかに業界まるごと薄い犯罪者集団のような ものかもしれません。)  ・環境変数  正直、この環境(dos)で本格的な開発を 行うのは無理に想えました。  いわゆる統合開発環境とは、このような仕 様上の地獄を回避するための人々の願望だっ たのだなと想いました。  いわゆる古い言語とは、当然のことながら 機械寄りで、ハードウエアの癖が言語仕様に も顔を出しています。  たとえばC言語をやれば、機械の癖が身に つく(のでよい)という言い方は、黎明期の 先人氏がよくおっしゃったものですが、  ただそれはいささかエンスーシアリズムの 独りよがりの気味もあり、第一癖のあるシス テムでは、恐ろしくて大事な業務の大きなプ ログラムは事実上作ることができません。  メンテナンスや拡張をするのはたいていの 場合、作成者ではない別の人物です。  癖があったり、可読性の悪いシステムは事 実上改良することができず、スクラッチビル ドよろしく、一度建物を壊してゼロから構築 した方がはるかに安上がりだったりもします。  技師が自殺するひとつの背景は、  経験や貯金のような意味で、そのひとが仕 事を断り切れない広義の貧相さにあるといっ てもいいのかもしれません。  世間経験や社交性に欠けるという意味で、 ゲームで育った田舎の子供部屋の出身者がプ ログラマになることは、世間の迷惑なのかも しれません。  また、ヒッピーの流行が正しかったかどう かという議論はともかくとして、  パーソナルコンピュータの文化が、機械を 一部の良くも悪くもの職人から、いわゆる趣 味のプログラマに解放しようとする流れは、  複数種のハードの上で共通して動作するO Sのように、機械の癖や方言をできるだけ吸 収して見えなくする方向に払われて来た努力 でした。      *  今回わかったことは、dosシェルの世界は 変数という概念がまだ固まっていない段階な のだなという感想でした。  初期のbasicでもそうでしたが、  たとえばループ処理などで、  回数管理変数などが論理のどこで初期化さ れ、またインクリメントされるのかを厳密に 理解していないと、おもわぬ想定外の動作を 引き起こすということは、考えてみれば結構 あったことのように思い出されます。  今回は複数のファイルを扱うので、ネスト ループ構造を調べて組み込んだのですが、  環境変数が、代入しても思った通りに反映 されないという現象に悩まされました。  どうも変数の展開遅延という独特の現象が あるらしく、いわばその不快感は和室で畳の ふちを踏むと怒られるような、下町の理系的 明快さになじまない、泥沼格式とおなじもの です。  このような気分で長期間仕事をすれば、精 神から体調を壊すのはめにみえています。  免疫の理論を参照するまでもなく、しがら みからの自由とは、健康法の重要な一つの要 素ではあります。  新大陸のハンバーガーが巨大なのは、かび 臭いコンチネンタルに対するあてつけだから です。      *  技術的な補遺として、  ループの中で変数を確実に代入したければ、 cmd/c表記を使って別の世界(別のシェル)の 中で変数処理をすれば可能な様です。  これは、サブルーチンとしての子プロセス としてバッチファイルを用いる方法です。  また各バッチのメモリ空間は全くの別物と して管理されているとみなせばわかりやすい のかもしれません。  バッチ同士は引数渡しが可能で、  またメモリ空間がまったくの別管理である にもかかわらず、  変数そのものを、一時ファイルとしてスト レージに置けばまたそれを介して情報をやり 取りできます。  これは高級言語におけるグローバル変数の ように扱えます。  一時期関数処理が流行したときに、グロー バル変数を理由もなく嫌う意識があったよう ですが、  しかしたとえばGUI環境における、コンポ ーネントのプロパティ群は、  それそのものが構造体に統べられた、グロ ーバル変数の束のようなものです。  これは、いわば物理的に人間の祖先が、外 界認識のインターフェースとして、いわば現 在の様式意識を発達させてきた来たことの、 延長であるともいえます。  そのわれわれの意識の仕様からくる要請と して、  外界=環境のパラメータである指標は、や はりある程度堅牢であることが必要なようで す。  青年の悩みとして哲学は人類が存続するか ぎり必要とされますが、  そのための言葉とは、人生や生命の重みに 耐えられるほど堅牢な煉瓦である必要があり ます。  不確定性原理に照らせばもちろん、絶対的 に堅牢な言葉は存在しませんが、  検証による程度問題として、思考にはでき るだけ客観的な科学的な表現が、堅牢さの意 味では適切であるように想えます。  文学者が自殺をするのは、  絶対的に堅牢な理想をもとめたり、  甘いあやふやな概念に人生をゆだねたり、  したことの帰結であることはもちろんです が、  ゼロで割る行為が無限大を爆発させるよう に、実はこの二つは全く同じことの表と裏で はあります。  ・・・実存主義とは理系にとっては自明の 概念です。  宇宙にも文明にも人生にも、よそから肯定 されたという意味での存在の必然性などあり ません。  厳密には人生に意味などないのです。  逆に言えばだからこそ、  現実には実存主義の砂漠を生きられない我 々は、観測と経験によって示されるできるだ け堅牢な「経験知識としての環境変数」が必 要なのです。博物学の意味で。アリストテレ スならそういうかもしれません。 (以上、こじつけ:笑。) ====================  readmeの終わり ====================