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

如何将数据拆分至最多文件?字符串指定字符前后截取实现

处理字符串提取S前后字符并拆分文件的R方案

提取并格式化输出每个S的前后字符

以下是直接可用的R代码,能准确保留你需要的对齐格式:

# 定义原始字符串
df <- "PFSSQQRPHRHSMYVTRDKVRAKGLDGSLSIGQGMAARANSLQLLSPQPGEQLPPEMTVA"

# 定位所有字符S的位置
s_indices <- gregexpr("S", df)[[1]]

# 打印表头
cat(sprintf("%-18s %s\n", "5 count before S", "5 counts after S"))

# 遍历每个S的位置,截取并输出前后字符
output_lines <- lapply(s_indices, function(pos) {
  # 截取前5个字符(处理开头不足5位的情况)
  pre_str <- substr(df, max(1, pos - 5), pos - 1)
  # 截取后5个字符(处理末尾不足5位的情况)
  post_str <- substr(df, pos + 1, min(nchar(df), pos + 5))
  # 格式化对齐输出
  line <- sprintf("%-18s %s", pre_str, post_str)
  cat(line, "\n")
  return(line)
})

# 转换为向量方便后续拆分
output_vec <- unlist(output_lines)

运行后会输出符合要求的格式:

5 count before S    5 counts after S
PF                 SQQRP
PFS                QRPHR
RPHRH              MYVTR
KGLDG              LSIGQ
LDGSL              IGQGM
AARAN              LQLLS
SLQLL              PQPGE

拆分结果至尽可能多的文件

要实现拆分到最多文件,我们给每个结果行单独生成一个文件:

# 循环生成单个文件
for (idx in seq_along(output_vec)) {
  # 自定义文件名,用序号区分
  file_name <- sprintf("s_segment_%d.txt", idx)
  # 写入表头和对应行内容
  writeLines(c("5 count before S    5 counts after S", output_vec[idx]), con = file_name)
}

这段代码会生成7个独立文件(原字符串含7个S),每个文件对应一行结果。如果不需要每个文件都带表头,去掉c("5 count before S...", output_vec[idx])里的表头部分即可。


内容的提问来源于stack exchange,提问作者nik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:20:43