2017-01-21 3 views
0

Я хочу написать код в R, чтобы разделить шестнадцатеричные числа на разделители. У меня есть файл в том числе со всеми шестигранными числами, разделенных пробелом, как показано ниже:разделить длинные шестнадцатеричные числа на 0D 0A в 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? Спасибо.

ответ

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" 
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() для отображения на экран или записи в файл в виде отдельных строк.