分類:computer

CSV 轉 OFX

CSV 轉 OFX

先前想要把所有記帳資料倒出來重新寫入,結果這路途真是困難重重。調查一下才發現,檯面上的記帳軟體多數能「匯入」各種常見格式的資料,可是「輸出」就不這麼大方。以 MoneyWiz 為例,只支援PDF以及 CSV兩種格式。CSV 算是可以輕鬆修改的格式,不過問題就在於 MoneyWiz 在匯入 CSV的時候,會直接略去「時間」這欄。這件事情完全不符合邏輯:哪有用自家的app輸出、再匯入卻會造成部分資料損失 囧!總之MoneyWiz的說明文件中提到:「用 OFX或QFX格式就可以把時間讀進來囉」(再提一遍:你不能輸出這些格式 orz)。

原本想要硬拼一筆一筆輸入,不過實在太血汗,最後乖乖來找 CSV 轉 OFX/QFX 的方法。最大的困難就是:「我不知道 OFX/QFX格式長什麼樣」,官方的文件相當冗長,完全不實用,只好繼續在網路上挖其他人的心得或範例。

在這個過程中,找到幾個網站或文件,不過後來因故派不上用場,在這邊還是記錄一下:

  • CSV converter
    • 註冊免費,上傳你的CSV檔案,由於不見得能自動辨識CSV文件的各欄位,所以網站有提供下拉選單讓你手動對應。後來沒用的原因是,手動對應的欄位「只有日期(date)、沒有時間(time)」,所以就算轉成 OFX還是不能滿足我的需求。
  • A csv to ofx / qif converter in Python
    • 不會 Python ,試了他附的幾個案例都無法順利執行,先跳過。
  • Convert a paypal CSV export to an OFX file
    • 雖然也是 Python ,不過語法簡單多了,大概看的懂。不過程式有幾個變數在我的Paypal CSV找不到,後來找到可以繞過去的方法,所以就沒有繼續研究,不然我覺得這隻程式的解法最好。

前面說到因為不清楚 OFX 的格式,所以得要先找個 OFX 範本。範本從哪裡來?最後是從 PayPal CSV to OFX Writer 看到一線曙光。程式開發者相當佛心,給了30天的全功能試用!所以我就利用這隻程式與Paypal CSV 轉出可以給 MoneyWiz 吃的 OFX檔案。

聽起來很棒 XD 不過中間還是有些問題需要自己動手處理一下(遠目)。

首先是哪裡來的 Paypal CSV 檔案?
Paypal 自家的網站:「交易記錄>下載記錄」,以英文版網頁來說:

  1. 選擇「Activity」頁面
  2. 右側應該會出現「Statements」
  3. 點選之後,選擇「Export activity」
  4. 瀏覽器會跳到以下網址
  5. 選擇你有交易的時間、下載檔案格式選擇「Comma… / All activity」
  6. 總算拿到檔案了,這個檔案就可以直接上傳到「 PayPal CSV to OFX Writer」進行轉檔。

Paypal CSV 的內容如下:
一開始是檔頭、接續可以有很多行的交易記錄,建議看原始的格式會比較清楚(右下角的 view raw)。

於是可以開始動手把 MoneyWiz 輸出的 CSV 檔案改成Paypal CSV 格式了。修改過程有以下幾點注意事項:

  • 日期(date):格式為 yyyy-mm-dd ,最簡單的改法就是在 Excel 裡面打開、再修改格式後儲存。
  • 時間(time):格式微:hh:mm:ss,一樣到Excel裡面把消失的秒數補回去。
  • Name:轉為 OFX 導入 MoneyWiz時,這欄會對應到收款人,建議所有交易記錄在這欄使用一樣的內容。待資料順利導入MoneyWiz,再從程式設定一口氣刪除就好。
  • Type:轉為 OFX 導入 MoneyWiz時,這欄會對應到「描述」。至於MoneyWiz裡面的「類型」,則是在OFX匯入的時候可以手動選擇。
  • Receipt ID 保持原狀就好
  • Balance:需要有數值不能留空,但是匯入 OFX時好像用不到。
  • 每個欄位之間,除了以逗點分隔、也需要雙引號框起每一個欄位。話說Excel 產生的 CSV 檔案似乎沒辦法主動加入雙引號,所以我是用 OpenOffice 另存新檔,存檔介面中需加選「編輯篩選設定」、並且在後續勾選「文字儲存格一律加上引號」。

大概就是這樣,收工。 XD

如何用NCL描述時間

如何用NCL描述時間

前言

縱使二進位 (Binaries) 檔案有體積小、方便輸出的優勢,但是過於簡潔也導致處理資料的困擾。以我的觀察,很少人有撰寫完整的使用說明的習慣,最多就是口頭指點一番。於是我很怕拿到二進位檔案,因為不清楚資料分布的特性,得花上不少時間確定沒有把經緯度、高度、時間各軸搞錯。

當我碰到 NCL+netCDF 這個組合時,不知道有多麼高興(雖然裝netCDF好像不是那麼容易 囧)。 netCDF 格式裡可以清楚看見各參數的單位、維度名稱與尺寸,模式輸出檔案還有漂亮的時間資訊。

基本的時間資訊包含哪些屬性?

ncl_filedump 叫出一個輸出檔作為範例:

上面這個案例中,「time」就是時間資訊:這個參數至少會包含以下兩個屬性「 calendar」、「units」。特別重要的是「units」,他是用來作為時間資訊的「基準點」。就好比日常生活中,我們會用「西元」訂為基準,把歷史事件分為西元前、西元後。

話說回來,「units」這個字串是可以自由選擇基準點的,只要字串格式符合規定就好。 NCL 6.3.0 版來說,字串的格式為「時間單位+介系詞+時間基準點」,詳見相關函式的說明。至於為什麼多半使用「1900年1月1號0點0分」,我想只是為了方便,自己寫的程式倒是不見得一定要用這個基準點。

常見的時間格式

  • UT-referenced date:我們所熟悉的「年月日時分秒」、優點為好閱讀,通常以「六組」獨立的參數儲存。
  • mixed Julian/Gregorian date:依照屬性「units」所規定的時間基準點,所組成的「一組」精簡化的雙精確度數字。因為已簡化為一維陣列,所以能作為「Coordinate variables」使用。

看下面這個例子應該會對上述兩種日期格式更清楚:

程式執行出來的結果:

總結來說,自行處理完的資料,其儲存所使用的時間格式以 mixed Julian/Gregorian date 為優先考量。

哪裡會用到時間格式?

  • 篩選特定時間的資料作分析:附上時間資訊之後,就可以利用 Coordinate subscripting "{...}" 過濾出想要的時間區段,例如,有個參數 QSNOW ( Time, bottom_top, south_north, west_east ),利用下面的 NCL 指令擷取出2015年三月的所有資料:QS=QSNOW{20150301:20150331,:,:,:}
  • 以時間表示的特殊座標軸,詳見NCL官網的Time labels
  • 另外有件事情要注意一下,雖然說目前 (NCL 6.3.0) 已經用 「cd_calendar」系列函式取代「ut_calendar」等函式,不過當你的時間格式中的「units」單位是採用”minutes”或”seconds”時,「cd_xxx_calendar」會有bug,因此建議使用舊的「ut_xxx_calendar」函式。我自己是有碰到這個bug,在NCL更新之前,我仍然都是ut開頭的函式為主。

[上述bug的原文出處]

Note: there is a potential rounding bug in cd_calendar which causes a problem in this routine if you have a units of “minutes since” or “seconds since”. It sometimes causes the minutes/seconds to be returned as something like “0/60” (0 minutes/60 seconds) rather than “1/0” (1 minute/0 seconds). If you are affected by this bug, then you may be able to use ut_string as a work-around, if you are using a “standard” calendar.

G+ 與 blogger 權限設定

G+ 與 blogger 權限設定

被問到 G+ 跟 blogger 的分享設定,所以測試了一下。

由於 G+ 只是個分享平台 ( 跟 Facebook ) 一樣,所以決定誰可以看到文章的隱私權限還是控制在 blogger 的設定上。以下舉幾個例子來說明:

情況一:整個 blog 只想與特定朋友分享

作法:「設定、基本、權限、網誌讀者」選擇「僅限這些讀者」。

 

僅限這些讀者的欄位可以輸入一般的 email 或 google 帳號。由於 Google 鼓勵用他們的帳號登入,所以前者雖然會收到登入連結,不過 30 天之後就會失效。

 

這個方法是最安全的,縱使發佈文章時分享在 G+ 給所有人,不過使用者需要登入才看的到文章。如果不在「僅限這些讀者」的名單中會顯示沒有權限,自然看不到了。

情況二:沒有大肆宣揚的 blog ,但新文章發表時在 G+ 的分享只希望給部分朋友看到。

作法:blogger 的權限可以維持預設「所有人」; 發文前請確定 G+ 已經建立好「社交圈」,例如:「可以看 blog 的人 XD」。

 

在 blogger 發文分享時,選擇該 G+ 群組。另外建議發佈之後,到 G+ 的該則訊息點選右上角的三角形,選擇「鎖定這則訊息」,這樣可以防止可以看到的人,意外轉給群組外的人。當然對方把網址複製起來還是可以自己分享啦,只是增加操作的麻煩而已 囧

文章如果不想被特定人士知道,還是請乖乖用情況一,不然還是別寫到網路上吧。

刪除GMail Meter的授權失敗通知

刪除GMail Meter的授權失敗通知

找了半天,至少這個解法有用。

  1. 登入後,前往 https://docs.google.com/macros 。
  2. 選擇上方的「檔案」->「開啟」。
  3. 授權過兩次的話,應該就會看到兩組 GMail Meter 。
  4. 選擇並開啟之後,點選左邊欄位中 GMail Meter 的最頂層的資料夾。
  5. 回到上方的標籤列,選擇「檔案」->「刪除」。
  6. 先前有幾個做幾次就可以了。

不免要抱怨一下,這介面鬼才找的到阿。

介紹相關文章的人通通沒有介紹刪除的方法,不知道是想留著以後再發一篇文章還是怎樣,有點賭爛。