[Py] 將地球科學繪圖上課用的範例轉為bash的程式

地球科學繪圖是由胡老師開的一門課,主要介紹使用通用製圖工具–Generic Mapping Tool 進行地球科學相關資料的繪圖工作。本文是記錄在修課時,由於本身使用 Mac 環境工作,然而範例都是以 Windows 的 Batch 環境為主,故寫了一個小小的 Python 程式來做轉換。

所需程式:基本上 Linux 系統都有內建 Python 2,應該不用額外安裝
  • Python:2.6 以上,在 2.7.10 執行無誤,3以上版本未測試(print未更改)
使用說明:
在命令列中:

$python DosToBash.py input_filename [arguments]

其中 [arguments] 為以下選項,用於控制執行的模式:

    arguments:
    input_filename : Required. 輸入的檔案,必須給的參數且需放在第二個變數
    -p : print out all the lines for inputfile. 純粹列出文字檔所有的內容。
    –help : print help information. 印出使用說明。
    –out=filename : specify the output filename. 指定輸出檔案的檔名,預設為filename.sh
    –edit=True : edit variables. 編輯文章內的變數。輸入後當掃描到 SET var1=original 時,會等待使用者輸入新的 var1 變數值。

更新紀錄:隨著課程遇到越來越多不同的指令,慢慢加入新的並且更加精確的修正。

v0323:
add tempfile module.
change  “\r\n” to “\n”
“gawk” to “awk”, “” to ”

v0329:
change “rem” to “#”

v0402:
major update
new class: key_word_process:
__init__ : initialization
_add_var : add variable to the dictionary ‘var’, even edit it.
_get_var_value_line : return a line with variable setting.
_bat_to_sh_var : replace all variables stored in ‘var’ in the given sentence
pip_line_process : divide the pipe command in to two sentence and process with ‘parser’
parser : the parser, the return the replaced sentence.

now the scipt is able to process pipe(|) commands
add arguments :
-p : print out all the lines for inputfile
–help : print help information
–out=filename : specify the output filename
–edit=True : edit variables
add function :
main_process : construct ‘key_word_process’, call functions in ‘key_word_process’ and write file.
print_all_line : print all the line in the file include hidden characters
print_help : print help informations
v0405:
new keyword “Set”, equal to “set” (06a)
v0406:
solve the problem – the parser will not parse the second command of pipe(|) because of the space.
(Use lstrip to fix it)

程式做的事:
  • 修改換行符號 \r\n 為 \n 。
  • 辨認 SET var=* 的命令,轉為 var=* 或是使用者指定的新變數。
  • 消除 pause 指令( bash 無)。
  • 註解 REM 轉為#。
  • 刪除檔案 DEL 轉為 rm。
  • 列舉或是印出文字文件的 type 命令改為 cat。
  • gawk 改為 awk ,且雙引號 ” 改為 單引號 ‘ 。
程式碼:(未來有時間再解釋相關內容,不過註解寫滿多的應該不難讀 :P)

 

請大家多多指教!!


請多多指教!

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料