Попробуйте определить значение по умолчанию, которое пройдет проверку:
[ConfigurationProperty("startTime", IsRequired = false, DefaultValue = "00:00:00")]
[RegexStringValidator(@"\d{2}:\d{2}:\d{2}")]
public string StartTime
{
get
{
return (string) this["startTime"];
}
set
{
this["startTime"] = value;
}
}
Вот вариант с tidyverse
. Создайте data_frame
с 'var1', separate
в три столбца на основе индекса позиции, удалите ,
в конце строки в столбце 'v3', создайте столбец группировки с gl
, чтобы сгруппировать строк в каждых 5 строках, сгруппированных по 'grp', 'v1' и 'v2', summarise
по 'v3' путем paste
элементов v3 в одну строку
library(tidyverse)
data_frame(var1) %>%
separate(var1, into = paste0('v', 1:3), sep= c(1, 5)) %>%
mutate(v3 = str_remove(v3, ",$")) %>%
group_by(grp = as.integer(gl(n(), 5, n())), v1, v2) %>%
summarise(v3 = toString(v3)) %>%
ungroup %>%
select(-grp)
# A tibble: 3 x 3
# v1 v2 v3
# <chr> <chr> <chr>
#1 1 0300 010118, 02, 03, 0405, 0512, 0612, 0717
#2 1 0310 010618, 0221, 0315, 0412, 0517, 0612,0729
#3 1 4510 010517, 0212, 03, 0465, 0588, 0651, 0777
Или мы можем сделать это в base R
, создав разделитель в упомянутых позициях, а затем использовать read.csv
df1 <- read.table(text= sub("^(.)(.{4})(.*),?$", "\\1-\\2-\\3", var1),
sep="-", header = FALSE, stringsAsFactors = FALSE, col.names = paste0("v", 1:3))
df1$grp <- as.integer(gl(nrow(df1), 5, nrow(df1)))
aggregate(v3 ~ ., df1, FUN = toString)[-3]