使用grep匹配TXT指定字符并插入修改行的R语言问题求助
文本处理问题解决方案
问题描述
需要处理Test.txt文件,完成以下需求:
- 匹配同时包含
un和ɛ̃的行; - 对每个匹配行,插入一行内容完全相同但将
ɛ̃替换为œ̃的新行; - 将原文件内容加上插入的新行输出到新的TXT文件。
Test.txt内容如下:
V1 V2 1 chambrun ʃ ɑ̃ b ʁ ɛ̃ 2 chambrun ʃ ɑ̃ b ʁ œ̃ 3 alun a l ɛ̃ 4 emprunt ɑ̃ p ʁ ɛ̃ 5 demprunta ɑ̃ p ʁ ɛ̃ t a 6 fempruntaient ɑ̃ p ʁ ɛ̃ t ɛ 7 empruntait ɑ̃ p ʁ ɛ̃ t ɛ 8 eempruntant ɑ̃ p ʁ ɛ̃ t ɑ̃ 9 gemprunte ɑ̃ p ʁ ɛ̃ t 10 hempruntent ɑ̃ p ʁ ɛ̃ t 11 demprunter ɑ̃ p ʁ ɛ̃ t e 12 vempruntes ɑ̃ p ʁ ɛ̃ t 13 hemprunteur ɑ̃ p ʁ ɛ̃ t œ ʁ 14 eemprunteurs ɑ̃ p ʁ ɛ̃ t œ ʁ 15 bempruntez ɑ̃ p ʁ ɛ̃ t e 16 kemprunts ɑ̃ p ʁ ɛ̃ 17 nempruntèrent ɑ̃ p ʁ ɛ̃ t ɛ ʁ 18 vemprunté ɑ̃ p ʁ ɛ̃ t e 19 fempruntée ɑ̃ p ʁ ɛ̃ t e 20 wempruntées ɑ̃ p ʁ ɛ̃ t e 21 2empruntés ɑ̃ p ʁ ɛ̃ t e
原尝试代码输出的是匹配行的索引而非实际文本,核心问题在于对grep返回值的处理错误,以及未正确读取和处理原文件的所有行。
原代码问题分析
grep('un.*ɛ̃', readLines("Test.txt"))返回的是匹配行的索引数字,而非行的实际文本内容;- 循环中直接使用索引
line拼接,导致最终结果是数字而非文本; all_lines <- c('Test.txt', modified_lines)错误地将文件名作为内容加入,而非原文件的所有行;- 循环未闭合(缺少
}),存在语法错误。
修正后的代码
# 1. 读取原文件所有行 all_original_lines <- readLines("Test.txt") # 2. 初始化存储最终内容的向量 final_lines <- character() # 3. 遍历每一行,处理匹配行 for (line in all_original_lines) { # 添加原行到最终内容 final_lines <- c(final_lines, line) # 判断当前行是否同时包含'un'和'ɛ̃' if (grepl('un.*ɛ̃', line)) { # 生成替换后的行并添加 modified_line <- gsub("ɛ̃", "œ̃", line) final_lines <- c(final_lines, modified_line) } } # 4. 按需求排序(如果需要保持原顺序+插入行则可跳过此步) # sorted_lines <- sort(final_lines) # 5. 写入新文件 writeLines(final_lines, 'myfile.txt', sep = '\n')
代码解释
- 读取原文件:用
readLines一次性读取所有行到向量all_original_lines,完整保留原文本内容; - 遍历处理:逐行检查是否匹配模式
un.*ɛ̃,匹配则先添加原行,再添加替换ɛ̃为œ̃的新行;不匹配则直接添加原行; - 写入文件:将处理后的所有行写入新文件,确保输出的是完整文本内容而非索引。
如果需要最终内容按字母排序,取消注释sorted_lines相关代码,将writeLines的参数改为sorted_lines即可。
内容的提问来源于stack exchange,提问作者hall_damien
相关产品推荐
相关产品推荐

