在R中使用read.table读取Android top输出文件时移除特殊字符
处理含ASCII转义字符的Android top输出文件
可以直接在R读取文件的过程中自动清理ASCII转义字符,无需手动处理。核心思路是先读取文件所有行,用正则表达式过滤掉转义序列,再将清理后的内容传入read.table。
修改后的完整代码
i <- 0 for (file in data_files) { i <- i + 1 file_path <- paste(folder, file, sep="/") # 读取文件行并清理转义字符 lines <- readLines(file_path) # 移除ANSI转义序列(颜色、光标控制等) clean_lines <- gsub("\\x1b\\[[0-9;]*[a-zA-Z]", "", lines) # 过滤空行避免读取错误 clean_lines <- clean_lines[clean_lines != ""] # 基于清理后的内容计算最大列数 ncol <- max(count.fields(textConnection(clean_lines), sep = "")) # 读取清理后的数据 Top_Data_Frame <- read.table(text = clean_lines, header = FALSE, fill = TRUE, col.names = paste0('V', seq_len(ncol))) # 输出CSV文件 output_file <- paste(folder, paste0("The_Whole_File_", i, ".csv"), sep="/") write.csv(Top_Data_Frame, file = output_file, row.names = FALSE) }
关键说明
gsub("\\x1b\\[[0-9;]*[a-zA-Z]", "", lines):精准匹配Android top输出中常见的ANSI转义码(以\x1b[开头,后续跟着数字/分号,最后以字母结尾的控制序列),直接替换为空字符串。- 改用
textConnection(clean_lines)计算列数,确保列数统计是基于清理后的内容,避免原文件转义字符干扰列数判断。 - 如果需要进一步清理所有非打印特殊字符,可以在清理转义序列后添加:
该正则会保留所有可打印字符(包括空格、数字、字母、符号),仅移除控制类特殊字符。clean_lines <- gsub("[^[:print:]]", "", clean_lines)
内容的提问来源于stack exchange,提问作者Darth Ratus
相关产品推荐
相关产品推荐

