星影の魔術師の魔法の呪文

PR

プロフィール

星影の魔術師

星影の魔術師

キーワードサーチ

▼キーワード検索

コメント新着

星影の魔術師 @ Re[1]:パートナーが SBI証券に申し込む(09/27) New! 和活喜さんへ いつもありがとうございます…
和活喜 @ Re:パートナーが SBI証券に申し込む(09/27) New!  今晩は。金曜日です。福岡宗像は晴れで…
星影の魔術師 @ Re[1]:パートナーが SBI証券に申し込む(09/27) New! 恵美子777さんへ いつもありがとうござい…
恵美子777 @ Re:パートナーが SBI証券に申し込む(09/27) New! 3位  22位  1位でした。 いいね!も…
星影の魔術師 @ Re[1]:木曜日です、今週も後半戦突入(09/26) 和活喜さんへ いつもありがとうございます…
2020.10.03
XML
カテゴリ: プログラミング
魔術師です。

昨日は週末だと言うことで少し飲み過ぎたようです。

キンミヤ焼酎をホッピーを
最近気に入っている果汁のみで添加物なしのキリンの「本搾り」
ワーファリンは飲んでないのでグレープフルーツでも大丈夫と言うことでグレープフルーツを飲みました。
生のフルーツならではの果汁感がこのシリーズは素晴らしいです。
そのあと黒霧島を 200ml 飲んでいつもは 100ml ですが、週末だし少し多かったかも知れません。
飲んですぐにパタッと寝てしまいました。
朝起きて頭がガンガンするのは風邪なのか?二日酔いか?


一昨日になりますが、パートナーの仕事のシフトに関して毎月データを送ってもらっているのですが
Google カレンダーに取り込むためにエディターで正規表現を使って加工していました。

だけど面倒くさいのでプログラム一発で加工したいけど、こんなものにガッツリプログラムを組みたくない。
だったらスクリプト系のプログラムだよねとはずっと思っていたのです。
思っているだけで全然動いていなかったのですが、今月のデータをもらったのでちょっとがんばってスクリプトを組みました。

行処理なので awk だよなあと思っていたのですが、
sed ではきっと力不足、Perl 使いなら悩まないのでしょうけど使いこなせてない
今なら AI 処理も出来る Python でしょうがイチから勉強しないといけない。
と言うことでスクリプト系の言語の awk にしました。

元データ


10月の勤務表を送ります
1日(木)・・夜勤
2日(金)・・明け
3日(土)・・休み






加工後のカンマ区切りデータ


Subject,Start date,All Day Event
夜勤,2020/10/1,true
明け,2020/10/2,true
休み,2020/10/3,true






使っていた正規表現

これを
([0-9]+).*・・(.*)

これに文字列置き換え
\2,2020/10/\1,true

正規表現ではパターンにマッチした行の一部を切り出して再利用が出来るのです。
文字列変換していましたが月のデータは最初に出てくるので取り込んでデータとして使いたいなあと思っていました。
だけど単なる文字列変換では不可能です。


それと awk の処理系をどれを使うかが問題です、ちゃんと日本語が使える awk にしないといけません
MS-DOS 時代の jgawk が定番だけど、16ビットのソフトだよね。
Linux 上で処理すればここで悩まなくていいので WSL2 を使うか Raspberry Pi に転送して処理するかとも思ったけど転送の手間がかかるのでボツ
普段使っている busybox-w32 の中に含まれている awk を使ってみました。

busybox-w32
https://frippery.org/busybox/


日本語が化けて通らないと思ったら元のデータファイルが UTF-8 で保存されていたのでした。
SJIS 変換して通すと綺麗に通りました。


単なる変換だけでなく
12月に翌年1月のデータを処理する場合と、12月分のデータには翌年の 1月のデータも一部追加される場合もあるので対応しました。
システム日付とデータ日付を比較して翌年のデータになるように計算しました。


calconv.awk スクリプト


#!/usr/bin/awk

BEGIN {
    print "Subject,Start date,All Day Event"
    month=1;
    year=strftime("%Y");
    todays_month=strftime("%m");

    l=0;
}

# ([0-9]+).*・・(.*)
# \2,2020/1/\1,true

/[0-9]+月/ {
    sub("月の.*$","",$0);
    month = $0;
#    print month;
    if ( todays_month == 12 ) {
        if ( month == 1 ) {
            year = year+1;
        }
    }
}

/[0-9]+日.*・・/ {
    l = l+1
#    printf "$2,2020/1/$1,true\n"
    sub("日", " ", $0);
    sub("・・", " ", $0);
    day=$1
    if ( l > 31 && month == 12 ) {
        year = year + 1;
        month=1;
        l=0;
    }
    printf("%s,%d/%d/%d,true\r\n", $3, year, month, day );
}



大満足の出来です。
今まで月に 1回のことだからとエディターで文字列変換していまいしたが、
これからは自動で処理出来ます。


早期処理の同期が終わらない
USB オーディオインターフェースの問題でマシンを初期状態に巻き戻したので
複数マシンのデータ同期ソフトの最初の同期処理が未だに終わりません。
多量のデータがあるからだけど終わりそうになると再起動が必要になって初めからやり直しになっています。
データ転送はないのですが持っているデータとの差分チェックに時間が掛かっています。
夜に再起動したので一晩で 98% 今日終わればいいな。


オクで落札したカセットデッキですが、
出品者から連絡があったので一安心なのですが、着払いで送らないといけません。
梱包しないといけないし、引き取り依頼をかけないといけないので面倒くさいです。
これをしたくないからオクには出品しないのですけどね。

カセットデッキが使えなくなったので別宅に行って外付け dbx ユニットを持って来るのと
別宅のマシンが不調で立ち上がらないので様子を見に行こうかと思います。
追加でごぼうスティックを仕入れましょうか。


人気記事の一覧のある トップ

楽天のサービス紹介 ページへ飛ぶ

星影の魔術師に
応援のクリックをポチッとお願いします。

にほんブログ村 スマホ・携帯ブログ iPhoneへ にほんブログ村 IT技術ブログ IT技術メモへ

PVアクセスランキング にほんブログ村

皆さんの、協力に感謝しています。

AX





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2020.10.03 11:41:55
コメント(14) | コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

© Rakuten Group, Inc.
X
Create a Mobile Website
スマートフォン版を閲覧 | PC版を閲覧
Share by: