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

PR

プロフィール

星影の魔術師

星影の魔術師

キーワードサーチ

▼キーワード検索

コメント新着

星影の魔術師 @ Re[1]:昨日はラーメンでした(06/27) New! 和活喜さんへ いつもありがとうございます…
星影の魔術師 @ Re[1]:昨日は誕生日でした(06/26) New! カーサン4452さんへ いつもありがとうござ…
星影の魔術師 @ Re[1]:昨日は誕生日でした(06/26) New! chiichan60さんへ いつもありがとうござい…
和活喜 @ Re:昨日はラーメンでした(06/27) New!  お早うございます、木曜日。福岡宗像は…
カーサン4452 @ Re:昨日は誕生日でした(06/26) New! 20年+αのお誕生日おめでとうございました…
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) | コメントを書く


■コメント

お名前
タイトル
メッセージ

利用規約 に同意してコメントを
※コメントに関するよくある質問は、 こちら をご確認ください。


Re:awk を使ったデータフィルター処理(10/03)  
fujiwara13  さん
おはようございます。

飲みすぎはお気を付けて、
awkスクリプト、むつかしいです。

二日ほど病院で監禁でした、週明けと20日前後にそれぞれ2日程検査入院しますので伺えない日がありますが、まだくたばらないと思いますのでご了解を。

☆☆☆
(2020.10.03 09:07:00)

Re:awk を使ったデータフィルター処理(10/03)  
出品者さんと連絡が取れてよかったですね^^
私なんか、最悪出品者でしたから( *´艸`)

それにしても、勤務表をきちんと管理されてるのですね^^
私は、カレンダーに手書きで、
それを写メとって。。超アナログ( ゚Д゚) (2020.10.03 09:22:11)

Re:awk を使ったデータフィルター処理(10/03)  
Pearun  さん
アルコール類税率改定で安い第三のビールが値上がりするのは、個人的には痛手です。
正規表現は迷惑メール削除に、ちょっと使っていますけど、良く解りません。
(2020.10.03 09:47:41)

Re:awk を使ったデータフィルター処理(10/03)  
悠々愛々  さん
こんちニャンコ。

いつも応援ありがとなし。

感謝のポテチ・・・

(2020.10.03 13:12:25)

Re:awk を使ったデータフィルター処理(10/03)  
こんにちは。
何時も有難うございます。

素敵な日をお過ごし下さいね。
☆☆P (2020.10.03 13:55:46)

Re:awk を使ったデータフィルター処理(10/03)  
和活喜  さん


いつもコメント・応援を有難うございます。
 今日は休日です。いつもの様に10時まで爆睡。
寝だめをしました。(^-^)
地域の市会議員選挙準備で慌ただしくしております。
ご挨拶のみで失礼します。

今日も良き一日でありますように。
応援☆
(2020.10.03 15:40:08)

Re:awk を使ったデータフィルター処理(10/03)  
chiichan60  さん
今日は。

それは二日酔いですね。
ワーファリン、グレープフルーツという言葉を聞くと初孫がそうなので心臓病かと思いましたが、大丈夫ですね。

awkを使ったデータフィルター処理は難しくてちんぷんかんぷんです。

ヤフオクで落札して故障しているデッキを捨てるんじゃなくて送り返さないといけないんですか?
面倒ですね。

応援していきますね。!(^^)! (2020.10.03 16:53:38)

Re[1]:awk を使ったデータフィルター処理(10/03)  
fujiwara13さんへ
いつもありがとうございます。
入院とは穏やかではないですね、大丈夫でしょうか?
お大事にして下さいね。
(2020.10.03 20:21:33)

Re[1]:awk を使ったデータフィルター処理(10/03)  
カーサン4452さんへ
いつもありがとうございます。
シフトの予定はシフトナと言うアプリで管理しているらしくて、入力したデータがエクスポートできるのでいつももらっています。
Google カレンダーに取り込んで、それを会社の Microsoft 365 の予定表に連携して自動で取り込んでいます。
逆に会社の予定も Google カレンダーに取り込んでいます。 (2020.10.03 20:33:40)

Re[1]:awk を使ったデータフィルター処理(10/03)  
Pearunさんへ
いつもありがとうございます。
またまた値上がりしましたね。
取れるところから取ると言うのは勘弁して欲しいですね。

固定の文字列でなく正規表現は憶えると使い出がありますよ。
ぜひ活用をしてみて下さい。

例えば上記 "[0-9]+月" は数字の繰り返しと"月" の組み合わせで "1~12月"のすべてを表します。
1桁だけでなく 2桁も含んでいるところがミソです。
(2020.10.03 20:41:08)

Re[1]:awk を使ったデータフィルター処理(10/03)  
悠々愛々さんへ
いつもありがとうございます。
(2020.10.03 20:41:23)

Re[1]:awk を使ったデータフィルター処理(10/03)  
コバルト4105さんへ
いつもありがとうございます。
(2020.10.03 20:41:41)

Re[1]:awk を使ったデータフィルター処理(10/03)  
和活喜さんへ
いつもありがとうございます。
(2020.10.03 20:41:54)

Re[1]:awk を使ったデータフィルター処理(10/03)  
chiichan60さんへ
いつもありがとうございます。
ワーファリンではない血液の薬は飲んでいますのでグレープフルーツは気になりますよね。
そのことを文中に書くか少し迷いましたがグレープフルーツの影響のない薬だし敢えて触れませんでした。

カセットデッキは動作確認をするらしいです。
その上で返金に応じるかどうかみたいです。
(2020.10.03 20:48:52)

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

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