5.44. msel 条件式による行選択

c= パラメータで指定した計算式で計算をおこない、結果が真であれば、その行を選択する。 なおmcalと同じ計算式が利用できるので、詳細は mcal 項目間演算 を参照されたい。

パラメータ

i= : 型=str , 任意(default=標準入力)

入力データを指定する。

c= : 型=str , 必須

用意された関数を組み合わせて計算する式を指定する。
詳細は mcal 項目間演算 を参照。

o= : 型=str , 任意(default=標準出力)

指定の条件に一致する行を出力するデータを指定する。

u= : 型=str , 任意(default=出力しない)

指定の条件に一致しない行を出力するデータを指定する。

r= : 型=bool , 任意(default=False)

条件反転
選択ではなく削除する。

共通パラメータ

i= , o= , assert_diffSize= , nfn= , nfno= , x= , tmppath= , precision=

利用例

importと入力データ(CSV)の準備

 1import nysol.mcmd as nm
 2
 3with open('dat1.csv','w') as f:
 4  f.write(
 5'''customer,quantity,amount
 6A,1,10
 7A,2,20
 8B,1,30
 9B,3,40
10B,1,50
11''')
12
13with open('dat2.csv','w') as f:
14  f.write(
15'''a,b
16A,-1
17B,
18C,1
19''')

基本例

amount 項目の値が40より大きい行を選択する。 それ以外のデータは unmatch1.csv に出力する。

 1nm.msel(c="${amount}>40", u="unmatch1.csv", i="dat1.csv", o="match1.csv").run()
 2### unmatch1.csv の内容
 3# customer,quantity,amount
 4# A,1,10
 5# A,2,20
 6# B,1,30
 7# B,3,40
 8### match1.csv の内容
 9# customer,quantity,amount
10# B,1,50

NULL値の選択規制

msel コマンドでは c= で与えられた式を評価した結果がNULL値の場合その行は選択されない。 また、アンマッチ出力ファイルが u= によって指定されていれば、そのファイルに出力される。 以下の例では項目 b1=True 、NULL値、 1 を持つ3行のデータについて、0より大きい行を選択しているが、 NULL値を含む行はアンマッチ出力ファイルへと出力される。

1nm.msel(c="${b}>0", i="dat2.csv", o="match2.csv", u="unmatch2.csv").run()
2### match2.csv の内容
3# a,b
4# C,1
5### unmatch2.csv の内容
6# a,b
7# A,-1
8# B,

-rオプション指定

真偽は逆転するがNULL値の評価に変わりはない。 すなわちNULL値の行は選択されない。 以下の例では、上の例と同様のデータおよび選択条件で r=True をつけている。 真偽の選択条件は逆転しているが、NULL値を含む行は上記の例と同様にアンマッチファイルへと出力されていることがわかる。

1nm.msel(r=True, c="${b}>0", i="dat2.csv", o="match3.csv", u="unmatch3.csv").run()
2### match3.csv の内容
3# a,b
4# A,-1
5### unmatch3.csv の内容
6# a,b
7# B,
8# C,1

関連メソッド