Как найти и преобразовать весь формат даты для файла .txt? - PullRequest
0 голосов
/ 06 октября 2018

Предположим, у меня есть файл diary.txt.Я импортирую это как строку.Все даты в этой строке выглядят как ГГГГ.ММ.ДД, и я хочу найти и преобразовать их в ДДММГГГ.Что мне делать?

Например, вот diary.txt,

2018.01.01
It's a nice day.

2018.01.02
Today is a rainy day.

Его следует преобразовать в

Jan 01 2018
It's a nice day.

Jan 02 2018
Today is a rainy day.

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Сначала необходимо привести даты к соответствующим объектам даты (as.Date), а затем заменить их вновь отформатированной датой.См. ?strptime для синтаксиса о том, как указать новый формат.

# import data
diary <- tempfile(fileext = ".txt")
cat("2018.01.01
It's a nice day.

2018.01.02
Today is a rainy day.", file = diary)

xy <- readLines(con = diary)

# coerce to proper date format
dates <- as.Date(xy, format = "%Y.%m.%d")

# replace valid dates with new dates formatted using format()
# date should be all non-NAs
xy[!is.na(dates)] <- format(dates[!is.na(dates)], format = "%b %d %Y") # %b will depend on your locale, see ?strptime

# write to file
writeLines(xy, con = "result.txt")

# contents of result.txt
jan. 01 2018
It's a nice day.

jan. 02 2018
Today is a rainy day.

Обратите внимание, что он говорит не Ян, а Ян.Это из-за моего локального, который не совпадает с тем, к чему вы привыкли.

> Sys.getlocale()
[1] "LC_COLLATE=Slovenian_Slovenia.1250;LC_CTYPE=Slovenian_Slovenia.1250;LC_MONETARY=Slovenian_Slovenia.1250;LC_NUMERIC=C;LC_TIME=Slovenian_Slovenia.1250"

Если я установлю локаль времени на что-то другое ( может работать только на окнах )

> Sys.setlocale(category = "LC_TIME", locale = "English_United States.1252")

результат

> xy
[1] "Jan 01 2018"           "It's a nice day."      ""                      "Jan 02 2018"          
[5] "Today is a rainy day."
0 голосов
/ 06 октября 2018

Попробуйте это:

# Loading data
data <- readLines("diary.txt")

# Identifying lines with dates
date_lines <- grep("^[[:digit:]]", data)

# Creating dates
data[date_lines] <- format(as.POSIXct(data[date_lines], format = "%Y.%m.%d"), "%b %d %Y")

# Writing to new file
fileConn<-file("diary_fixed.txt")
writeLines(data, fileConn)
close(fileConn)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...