作业帮 > 综合 > 作业

怎样用Replace Pioneer解决这两个问题?

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/07/29 21:44:49
怎样用Replace Pioneer解决这两个问题?
有多个TXT文本文件,每个TXT文本中都包含数目不等的词语A
例如:
第1个文本中第2、4、8、13行包含词语A,这个文本非空行的最后一行为第20行
第2个文本中第1、6、9、11、18行包含词语A,这个文本非空行的最后一行为第24行
第3个文本中第1、3、7行包含词语A,这个文本非空行的最后一行为第15行
第4个文本中第7、10、26、39行包含词语A,这个文本非空行的最后一行为第41行
……
问题一:
统计每个词语A在其所在文本中是第几次出现以及与下一个词语A所在的行数之差(如果是文本中最后一次出现的词语A就统计这个词语A与文本非空行的最后一行的行数之差),注意词语A出现的次数用3位数字表示,行数之差用2位数字表示,格式为“出现次数\行数之差”,每行一个结果:
001\02
002\04
003\05
004\07
001\05
002\03
003\02
004\07
005\06
001\02
002\04
003\08
001\03
002\16
003\13
004\02
……
问题二:
统计每个词语A所在的文本是所有文本中的第几个以及在其所在文本中是第几次出现,都用3位数字表示,格式为“文本个数\出现次数”,每行一个结果:
001\001
001\002
001\003
001\004
002\001
002\002
002\003
002\004
002\005
003\001
003\002
003\003
004\001
004\002
004\003
004\004
……
怎样用Replace Pioneer解决这两个问题?
假设A在每行最多出现一次。
问题一:
单文件测试:
1. ctrl-o打开文件
2. ctrl-h打开replace窗口
* replace unit选为Paragraph
* replace with pattern输入:
sprintf("%03d\\%02d",++$N,count(replace($match,'\s+$',''),"\n")+1)\n
* If 输入$para_no>1
* 去掉print unmatched unit前面的勾
* 点击Settings页, Para start选None, Para end选others后面输入要搜索的关键词比如A
3. 点击Replace即可。

多文件:
首先按照以上第2步操作
然后在右下角的output file选择输出文件名,并把左边的">"改选为">> Append"
然后第3步改用Batch...按钮,然后把待处理文件拖拽到Batch Runner窗口中,点击Batch Replace即可。

问题二:
1. 打开Tools->Batch Runner窗口
2. 把待处理文件拖拽到Batch Runner窗口
3. 点击Fast Replace按钮
* 点击Add,在replace输入join("\n",map{sprintf("%03d\\%03d",$file_no,$_)}(1..count($match,'关键词')))\n完成后点击ok
* 选中reg exp, cross line, 和 Extract选项
* 点击Start,并选择output to single file即可。