You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:10:01