使用google calendar紀錄非週期性排班表@ perl note - 隨意窩

文章推薦指數: 80 %
投票人數:10人

看到這班表跟一般作業員和護理師有所不同,因為地點跟時間都是由公司安排而非輪班,甚麼時候被安排到哪邊是 ... 201501142318使用google calendar紀錄非週期性排班表. perlnotesomthingaboutperlscript日誌相簿影音好友名片 關於我加入好友我的相簿我的影音 全部展開|全部收合 關鍵字 abliou's新文章在perl中跑mxnetYAML資料格式使用googlecalendar紀錄非週期性排班表perl連上MSaccessaccdb格式particleswarmoptimization(PSO)withperl使用perl進行t-testperl進行卡方檢定(chi-squaretest)perl連接資料庫系統GeneticAlgorithmusingperlmylocalourstate abliou's新回應沒有新回應! HackMD目錄cloudnoteHadoopnote札記modellingnotepythonnoteperlnotelinuxnote 我的相簿 201501142318使用googlecalendar紀錄非週期性排班表?未分類有些人上班是機動制,也就是上班的地點跟時間不固定,必須由公司安排,例如機動型的社區秘書。

看到這班表跟一般作業員和護理師有所不同,因為地點跟時間都是由公司安排而非輪班,甚麼時候被安排到哪邊是沒有週期性的。

舉例來說,某位機動秘書需要支援兩個點(甲點和乙點),每個點都有早班跟晚班,公司的班表就會亂七八糟。

雖然可以用ABCD等代號來表示(甲點早班,甲點晚班,乙點早班,乙點晚班),但是還要回去查ABCD各代表哪個點跟哪個時間有點麻煩,也沒辦法發揮googlecalendar的特點。

之前為了處理這樣的班表,用手點的很辛苦,因為除了要輸入工作的點之外,還要點時間,一個月有三十天,光做班表就要做一小時。

找了很久,都沒有找到合適輸入班表的程式,只好自己想辦法。

之前有測試googlecalendar的csv匯入功能,但是按照說明文件製作出來的csv根本沒辦法用,甚至連直接用google的範例都不能匯入。

經過測試以後,發現用ics格式就能順利匯入,只好重新製作一個可以ics產生器。

ics定義格式很多,有興趣可以上wiki查看看。

不過使用perl撰寫,如果是在windows平台上會碰到中文編碼的問題(當然如果全部都用英文就不會有問題了,但我相信台灣人可以用中文都還是會盡量用中文吧?),處理中文編碼的問題就需要用到一些模組,但基本上都是perl內建不需要再額外安裝了。

以下就提供一個可以只少做出一個簡單可以順利匯入googlecalendar的perl範例   ==20160609新增windows執行檔,檔案是直接用perl編譯所以會有點大請大家忍耐== https://goo.gl/RM0q0p   ===程式碼分隔線==== #!/usr/bin/perl#pleasereferGPLv3use5.010; useEncodeqw(encodedecodefrom_to); useDate::Simple(':all'); openfile,">shiftshedual.ics"ordie;printfile<;chomp$name;#encode("utf8",decode("big5",$name));from_to($name,'big5','utf8');say"pleaseinputthestarttime(24hformat,eg:0700is7:00AM):";$stime=;chomp$stime;$stime*=100;$stime-=80000;if($stime<0){$sdd=-1;$stime+=240000;}else{$sdd=0;}$stime='0'.$stimeif$stime<100000;$stime='000000'if$stime==0;say"pleaseinputtheendtime(24hformat,eg:1700is5:00PM):";$etime=;chomp$etime;$etime*=100;$etime-=80000;if($etime<0){$edd=-1;$etime+=240000;}else{$edd=0;}$etime='0'.$etimeif$etime<100000;$etime='000000'if$etime==0;say"pleaseinputthedates(yyyymmdd,seperatewithcomma,eg:20150101,20150102):";$dates=;chomp$dates;for$date(split',',$dates){$sdate=$edate=d8($date);$sdate+=$sdd;$sdate=~s/-//g;$edate+=$edd;$edate=~s/-//g;sayfile'BEGIN:VEVENT';#DTSTART:20150114T080000Z#DTEND:20150114T170000Z#SUMMARY:testsayfile"DTSTART:${sdate}T${stime}Z";sayfile"DTEND:${edate}T${etime}Z";sayfile"SUMMARY:$name";sayfile'END:VEVENT';}print"inputanotherschedual?(y/n)";$endflag=;chomp$endflag;}while($endflageq'y');   printfile<



請為這篇文章評分?