你指的每个序列都是以>gi| test开头的么?那可以按行读进来,判断该行是否是>gi| test,如果是,接下来的每一行都单独处理,直到读到下一个>gi| test为止。
但是你电脑目录极有可能是gb2312的编码,你的路径中出现了中文“王大拿”,编码不匹配导致找不到文件,解决的方法如下任选一:
1、将中文路径改为英文路径;
或者
2、将在编辑器上方将代码文本的格式选为gb2312;
3、或者使用perl的Encode模块将路径由utf8转为gb2312
open STDIN,\"datetxt\" or die \"cannot open for :$!\";while(@date = ){chomp@a;} 查看原帖>>
有两种方法如果递归的找子目录可以用下面的files函数,只是找文件夹下面的glob就可以实现了
my @files;
files('', \@files);
print "$#files @files\n";
my @local;
@local = glob("/");
print "$#local @local\n";
sub files {
my $path = shift;
my $arr = shift;
opendir(my $H, $path) || return;
my @f = readdir($H);
close($H);
for my $f(@f) {
my $p = "$path/$f";
next if ($f =~/^[]+$/);
if (-f $p) {
push @$arr, $f;
}
else {
files($p, $arr);
}
}
}
@_ 在某个函数内,数组 @_ 包含传递给该函数的所有参数。
$_ 默认的输入/输出和格式匹配空间
--------------------------------------------------------------------------------------------------------
@_的示例:
#!/bin/perl -w
use strict;
&fun( 111,222,333 );
sub fun()
{
print @_;
}
这里会把传入函数的参数111222333打印出来。
---------------------------------------------------------------------------------------------
$_示例:
下面的几对代码都是等同的:
while (<>) # equivalent only in while!
while (defined($_ = <>))
/^Subject:/
$_ =~ /^Subject:/
tr/a-z/A-Z/
$_ =~ tr/a-z/A-Z/
chomp
chomp($_)
以下是几处即使没有写明 Perl 也会假定使用 $_ 的地方:
各种单目函数,包括像 ord() 和 int() 这样的函数以及除 "-t"
以外所有的文件 测试 *** 作 ("-f","-d"),"-t" 默认 *** 作 STDIN。
各种列表函数,例如 print() 和 unlink()。
没有使用 "=~" 运算符时的模式匹配 *** 作 "m//"、"s///" 和
"tr///"。
在没有给出其他变量时是 "foreach" 循环的默认迭代变量。
grep() 和 map() 函数的隐含迭代变量。
当 "while" 仅有唯一条件,且该条件是对 "<FH>"
*** 作的结果进行测试时,$_ 就是存放输入记录的默认位置。除了
"while" 测试条件之外不会发生这种情况。
(助记:下划线在特定 *** 作中是可以省略的。)
--------------------------------------------------------------------------------------------------
@_和$_都是perl很常用的特殊变量。建议系统看一下《perl语言入门》。
----------------------------------------------------------------------------------------------------------------
另附perl常用特殊变量列表:
perl 内置变量
$- 当前页可打印的行数,属于Perl格式系统的一部分
$! 根据上下文内容返回错误号或者错误串
$” 列表分隔符
$# 打印数字时默认的数字输出格式
$$ Perl解释器的进程ID
$% 当前输出通道的当前页号
$& 与上个格式匹配的字符串
$( 当前进程的组ID
$) 当前进程的有效组ID
$ 设置1表示处理多行格式现在多以/s和/m修饰符取代之
$, 当前输出字段分隔符
$ 上次阅读的文件的当前输入行号
$/ 当前输入记录分隔符,默认情况是新行
$: 字符设置,此后的字符串将被分开,以填充连续的字段
$; 在仿真多维数组时使用的分隔符
$ 返回上一个外部命令的状态
$@ Perl解释器从eval语句返回的错误消息
$[ 数组中第一个元素的索引号
$\ 当前输出记录的分隔符
$] Perl解释器的子版本号
$^ 当前通道最上面的页面输出格式名字
$^A 打印前用于保存格式化数据的变量
$^D 调试标志的值
$^E 在非UNIX环境中的 *** 作系统扩展错误信息
$^F 最大的文件捆述符数值
$^H 由编译器激活的语法检查状态
$^I 内置控制编辑器的值
$^L 发送到输出通道的走纸换页符
$^M 备用内存池的大小
$^O *** 作系统名
$^P 指定当前调试值的内部变量
$^R 正则表达式块的上次求值结果
$^S 当前解释器状态
$^T 从新世纪开始算起,脚步本以秒计算的开始运行的时间
$^W 警告开关的当前值
$^X Perl二进制可执行代码的名字
$_ 默认的输入/输出和格式匹配空间
$| 控制对当前选择的输出文件句柄的缓冲
$~ 当前报告格式的名字
$` 在上个格式匹配信息前的字符串
$’ 在上个格式匹配信息后的字符串
$+ 与上个正则表达式搜索格式匹配的最后一个括号
$< 当前执行解释器的用户的真实ID
$ 含有与上个匹配正则表达式对应括号结果
$= 当前页面可打印行的数目
$> 当前进程的有效用户ID
包含正在执行的脚本的文件名
$ARGV 从默认的文件句柄中读取时的当前文件名
%ENV 环境变量列表
%INC 通过do或require包含的文件列表
%SIG 信号列表及其处理方式
@_ 传给子程序的参数列表
@ARGV 传给脚本的命令行参数列表
@INC 在导入模块时需要搜索的目录列表
$-[0]和$+[0] 代表当前匹配的正则表达式在被匹配的字符串中的起始和终止的位置
☆
给你一个比较复杂点的例子。。。。
opendir (DIR,"X:\\")||die"$!";
chdir("X:\\");
@dirs=grep{/^\\$/}readdir DIR;
foreach $dir(@dirs){
opendir (DIR2,$dir)||die"$!";
@files=grep{/indd$/}readdir DIR2;
close DIR2;
}
close DIR;
当然还有更多的方法,可以用glob,LS所说的File::Find等等。。。。。
以上就是关于Perl中怎么将一个文件的内容提取出来进行下全部的内容,包括:Perl中怎么将一个文件的内容提取出来进行下、Perl语言文件读取与输出、如何用perl读取txt文件 - Perl -等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)