在R中将长十六进制数除以0D 0A

时间:2017-01-21 11:08:28

标签: r split carriage-return

我想在R中编写一个代码,用分隔符分割十六进制数。我有一个文件,包括所有以空格分隔的十六进制数字,如下所示:

0x01 0x02 0x03 0x04 0x0d 0x0a 0x05 0x06 0x07 0x0d 0x0a 

我想将所有这些十六进制数除以0x0d(CR:回车)和0x0a(LF:换行),我的意思是我想要这样输出:

0x01 0x02 0x03 0x04 
0x05 0x06 0x07 

我想我可以使用像strsplit()这样的函数,但我不知道如何。你能告诉我如何在R中实现这个? 感谢。

2 个答案:

答案 0 :(得分:1)

一对gsub来电会有效吗?

text <- "0x01 0x02 0x03 0x04 0x0d 0x0a 0x05 0x06 0x07 0x0d 0x0a"
text <- gsub( "0x0d", "\r", text )
text <- gsub( "0x0a", "\n", text )

给出了:

text
[1] "0x01 0x02 0x03 0x04 \r \n 0x05 0x06 0x07 \r \n"

答案 1 :(得分:0)

library(purrr)
library(stringi)
library(magrittr)

# stringi & tidyverse
readLines(textConnection("0x01 0x02 0x03 0x04 0x0d 0x0a 0x05 0x06 0x07 0x0d 0x0a")) %>%
  stri_split_fixed("0x0d 0x0a") %>%
  .[[1]] %>%
  stri_trim_both() %>%
  discard(equals, "")
## [1] "0x01 0x02 0x03 0x04" "0x05 0x06 0x07"

# base R + a little tidyverse
readLines(textConnection("0x01 0x02 0x03 0x04 0x0d 0x0a 0x05 0x06 0x07 0x0d 0x0a")) %>%
  strsplit("0x0d 0x0a") %>%
  .[[1]] %>%
  trimws() %>%
  discard(equals, "")
## [1] "0x01 0x02 0x03 0x04" "0x05 0x06 0x07"

# old school R
con <- textConnection("0x01 0x02 0x03 0x04 0x0d 0x0a 0x05 0x06 0x07 0x0d 0x0a")
lines <- readLines(con)
lines <- strsplit(lines, "0x0d 0x0a")[[1]]
lines <- trimws(lines)
lines <- lines[lines != ""]
lines
## [1] "0x01 0x02 0x03 0x04" "0x05 0x06 0x07"

paste0()制作包含换行符的单个字符串。 cat()显示到屏幕或作为单独的行写入文件。