首页 > 解决方案 > 将列表拆分为值列表列表

问题描述

我正在寻找拆分列表,例如

c('SET ANSI_NULLS ON',
  'GO',
  'SET QUOTED_IDENTIFIER ON',
  'GO',
  'CREATE TABLE dbo.Person(',
  ' Person int NOT NULL,',
  ' acct varchar(1) NOT NULL,',
  ' Kpl varchar(10) NULL,',
  ' Fac varchar(10) NULL,',
  ' Inst varchar(10) NULL,',
  ' CONSTRAINT PK_Person PRIMARY KEY CLUSTERED ',
  '(',
  ' Person ASC',
  ')WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY',
  ') ON PRIMARY',
  'GO',
  'ALTER TABLE dbo.Person ADD  DEFAULT (getdate()) FOR _Timestamp',
  'GO',
  'ALTER TABLE dbo.Person ADD  DEFAULT (host_name()) FOR _Hostname',
  'GO',
  'ALTER TABLE dbo.Person ADD  DEFAULT (original_login()) FOR _Username',
  'GO'
) 

进入列表列表,只要GO找到值就开始一个新列表:

c(c('SET ANSI_NULLS ON'),
  c('SET QUOTED_IDENTIFIER ON'),
  c('CREATE TABLE dbo.Person(',
    ' Person int NOT NULL,',
    ' acct varchar(1) NOT NULL,',
    ' Kpl varchar(10) NULL,',
    ' Fac varchar(10) NULL,',
    ' Inst varchar(10) NULL,',
    ' CONSTRAINT PK_Person PRIMARY KEY CLUSTERED ',
    '(',
    ' Person ASC',
    ')WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY',
    ') ON PRIMARY'
  ),
  c('ALTER TABLE dbo.Person ADD  DEFAULT (getdate()) FOR _Timestamp'),
  c('ALTER TABLE dbo.Person ADD  DEFAULT (host_name()) FOR _Hostname'),
  c('ALTER TABLE dbo.Person ADD  DEFAULT (original_login()) FOR _Username')
) 

标签: r

解决方案


这对你有用吗?

go_pos <- grep("GO", x) # find positions of "GO"s
go_groups <- cumsum(grepl("GO", x))[-go_pos] # build a grouping for split() then drop "GO"s
split(x[-go_pos], go_groups) # drop "GO"s then split on groups

推荐阅读