我需要解析CSV列中的一个字段:
TXDAT - SnpRespData_SC or SnpRespData_SC_PD (7)
我需要提取:
type_0 = SnpRespData
resp_0 = SC
pd_0 = 0
type_1 = SnpRespData
resp_1 = SC
pd_1 = 1
来自此字符串。我想将整个字符串传递给函数,并能够返回这六个值。
字符串可以是以下任何一种:
a)TXDAT - SnpRespData_SC_PD
b)TXRSP - SnpResp_SC
c)TXDAT - SnpRespData_SC或SnpRespData_SC_PD(7)
d)TXRSP - SnpResp_UC或TXDAT - SnpRespData_UC_PD(7)
所以我创建了一个函数来接收这个字符串并返回以下内容:
def map_rxsnp_transaction(rxsnp_transaction)
tx_dat = []
tx_rsp = []
案例rxsnp_transaction
when(/SnpRespData.*SnpRespData/)
tx_dat = rxsnp_transaction.split(/或/)
(tx_dat_0,dat_0_resp,dat_0_pd)= tx_dat [0] .split(/ _ /)
(tx_dat_1,dat_1_resp,dat_1_pd)= tx_dat [1] .split(/ _ /)
返回[tx_dat_0,dat_0_resp,dat_0_pd,tx_dat_1,dat_1_resp,dat_1_pd]
何时(/SnpResp.*SnpRespData/)
(tx_rsp,tx_dat)= rxsnp_transaction.split(/或/)
(tx_rsp,rsp_resp,rsp_pd)= tx_rsp.split(/ _ /)
(tx_dat,dat_resp,dat_pd)= tx_dat.split(/ _ /)
return [tx_rsp,rsp_resp,rsp_pd,tx_dat,dat_resp,dat_pd]
when(/ SnpRespData_ {1} /)
return rxsnp_transaction.split(/ /)
何时(/ SnpResp {1} /)
return rxsnp_transaction.split(/ _ /)
结束
结束
功能调用:
(tx_rsp [0],tx_rsp [1],tx_rsp [2],tx_rsp [3],tx_rsp [4],tx_rsp [5])= map_rxsnp_transaction table_col [5]
只是想知道我是否可以更好地优化这些代码......不喜欢它的方式
答案 0 :(得分:0)
我假设你正在寻找一个特定的字符串,即"SnpRespData"
。如果是这样,你可以这样做:
str = "TXDAT - SnpRespData_SC or SnpRespData_SC_PD (7)"
f, l = str.scan(/SnpRespData\w+/).sort
#=> ["SnpRespData_SC", "SnpRespData_SC_PD"]
type_0, resp_0, pd_0 = f.split('_') << 0
#=> ["SnpRespData", "SC", 0]
type_1, resp_1, pd_1 = f.split('_').first(2) << 1
#=> ["SnpRespData", "SC", 1]
type_0 #=> "SnpRespData"
resp_0 #=> "SC"
pd_0 #=> 0
type_1 #=> "SnpRespData"
resp_1 #=> "SC"
pd_1 #=> 1