====== プログラミング実習 ====== ===== 実用データ処理 ===== データを処理する際のちょっとしたテクニック **Keep It Simple Stupid.**\\ 頭文字をとってKISSの原則と呼ばれるが、複雑で高機能なプログラムを作るよりも、単純な機能だけをもったプログラムを組み合わせて使うことを考えよ。そのためには、後述する基本的なunixコマンド、リダイレクト、スクリプト言語の一行プログラムの柔軟な使用法を習得する必要がある。 特に効果的な概念は「[[スクリプト(主にシェルスクリプト)を作るスクリプト]]」という発想である。ぜひ、身に着けてほしい。 スクリプトで有効に使えるTips * unixコマンド * grep * sort * uniq * リダイレクション * One Liner * sed * awk * perl * ruby * python ** You Ain't Gonna Need It.** 頭文字をとってYAGNIと呼ばれるが、なんかよさげな機能を思いついても、実際に必要となるまでは実装してはいけない。できるだけ単機能で例外がないのが望ましい。 ===== 自分用のコマンドを作る ===== $ mkdir ~/bin $ cd bin (ファイルgetatomsをつくる) $ ls -l getatoms -rw-r--r-- 1 kimi sstlab 1350 Apr 17 16:38 getatoms $ chmod a+x getatoms $ ls -l getatoms -rwxr-xr-x 1 kimi sstlab 1350 Apr 17 16:38 getatoms $ cd $ getatoms usage: getatoms [-r R1 R2 R3] input_nc_file output_xyz_file ===== リダイレクト ===== プログラム「moge_exec」に、ファイル「hoge_in.data」から入力を読み込んで、出力をファイル「hage_out.data」に書き込むには $ ./moge_exec < hoge_in.data > hage_out.data または $ cat hoge_in.data | ./moge_exec > hage_out.data とする。 ===== シェルスクリプト ===== 自動的に実行したいUNIXコマンドを単に羅列したファイルを用意しておき、逐次自動実行することができる。簡単な制御構造も備えているし、ちょっと おまじないをすることによって、自前のunixコマンドのようにも使うことができる。 ==== シェルプログラミング ==== * ファイル名は○○○○.shにする。 * ターミナルで $ sh ○○○○.sh △△△△ と入力することにより実行される。スクリプト中で、△△△△という文字列は''$@''で参照できる。 $ cat hogehoge.sh #!/bin/sh なんとかかんとか $ chmod +x hogehoge.sh $ ./hogehoge.sh ===== awk ===== ファイル名は''○○○○.awk''にする。 ターミナルで $ awk -f ○○○○.awk △△△△ と入力することにより△△△△という名前のファイルを処理する。 $ awk -f hogehoge.awk datafile.data で実行できるawk fileの最初に #!/usr/bin/awk -f を書いておくと、 $ chmod +x hogehoge.awk とすることによって、あたかも独立したコマンドのように $ ./hogehoge.awk datafile.data で、実行することができる。 ==== awk実習 ==== * [[データの抽出]] ===== Pythonガイド ===== ASEを用いてDacapoによる計算を行うためには、若干のPythonの知識が必要です。 Pythonはオブジェクト指向の汎用言語で覚えておくと非常に便利なものです。 インタープリタとして実装されているため速度面ではcやFORTRANに比べて不利ですが、非常に柔軟な拡張性を持っており、各種モジュールを読み込むことによりVTKを使った描画から、RasMolやGnuPlotの自動実行までも行うことができます。 変数宣言がいらないこと、インタープリタでその場で試しながらプログラムを書いたりデバッグしたりできること、簡単な手順でグラフィックスを扱うことができることなどを考え合わせると、現代版BASICといった趣もあります。 * [[:python_seminor|即席ヘビ使い講座]] * ファイル名は''○○○○.py''にする。 * ターミナルで $ python ○○○○.py と入力することにより実行される。 * VTKやRasMol, GnuPlotで描画する場合は $ python -i ○○○○.py のように、''-i''をつけること。これをつけないと絵を描く前にプログラムが終了してしまう。 ==== Pythonで「コマンド」をつくるときの雛形 ==== #!/usr/bin/env python from optparse import OptionParser cmd = OptionParser(usage = '%prog [-t] [-p X Y Z] input_file output_file') cmd.add_option('-t', '--toggle', action = "store_true", default = False, help = 'ON/OFFを与えるだけのオプション') cmd.add_option('-p', '--position', type = 'int', nargs = 3, help = 'オプションとして3個の整数X Y Zを与える', metavar = 'X Y Z') (opt, argv) = cmd.parse_args() if len(argv) != 2: cmd.print_help() raise SystemExit input_file = argv[0] output_file = argv[1] option_on_off = opt.toggle option_xyz = opt.position ---- 詳細は[[:python_seminor |即席ヘビ使い講座]]を参照のこと。 ===== FORTRAN簡単ガイド ===== - [[fortran入門]] - [[:関数値出力のプログラム]] - [[数値積分のプログラム]] - [[構造因子のプログラム]] * [[:fortran文法]]