(附件程序可运行)
程序目的:在运行程序后出现的上图中点击“load”按钮后,在文本宽内显示出当前文件路径以及文件名称。
问题:运行后点击“load”,只能显示出当前路径中的部分文件。why??
use Tk;
use strict;
use Encode;
use Cwd;
my $name =decode("cp936","不能打开文件,请输入正确的文件名称!");
my $name1=decode("cp936","正在打开文件,请稍等 ………");
my $name2=decode("cp936","文件正在保存 ………");
my $name3=decode("cp936","文件已保存!");
my $info;
my $filename;
my $dir = getcwd;
my $n = 0;
my @file;
my $file_t;
my $mw = MainWindow->new;
$mw -> title("file-operation");
my $f = $mw->Frame->pack(-side => 'top', -fill => 'x');
$f->Label(-text => "Filename:", -font=>[-size=>12])->pack(-side => 'left', -anchor => 'w');
$f->Entry(-textvariable => \$filename, -font=>[-size=>10])
->pack(-side => 'left', -anchor => 'w', -fill => 'x', -expand => 1);
$f->Button(-text => "Exit", -font=>[-size=>12], -command => sub { exit; } )
->pack(-side => 'right');
$f->Button(-text => "Save", -font=>[-size=>12], -command => \&save_file)
->pack(-side => 'right', -anchor => 'e');
$f->Button(-text => "Load", -font=>[-size=>12], -command => \&get_dir)
->pack(-side => 'right', -anchor => 'e');
$mw->Label(-textvariable => \$info, -relief => 'ridge', -font=>[-size=>10])
->pack(-side => 'bottom', -fill => 'x');
my $t = $mw->Scrolled("Text", -font=>[-size=>10] )
->pack(-side => 'bottom',-fill => 'both', -expand => 1);
MainLoop;
sub load_file {
$info = "$name1";
$t->delete("1.0", "end");
if (!open(FH, "$filename")) {
$t->insert("end", "$name");
return;
}
while (<FH>) { $t->insert("end", $_); }
close (FH);
$info = "$name1";
}
sub save_file {
$info = "$name2";
open (FH, ">$filename");
print FH $t->get("1.0", "end");
$info = "$name3";
}
sub get_dir {
readsub($dir);
$t->insert("end", $n."\n");
$t->insert("end", @file);
}
sub readsub {
my ($file_t) = @_;
if (-f $file_t) {
$n++;
$file_t = sprintf "$file_t\n";
push @file,$file_t;
}
if (-d $file_t) {
opendir(AA,$file_t) || return;
my @list = readdir(AA);
closedir (AA);
my $file_to_act;
foreach $file_to_act (sort @list) {
if ($file_to_act =~ /^\.|\.$/) { next; }
else { readsub("$file_t/$file_to_act"); }
}
}
}
修改了子函数如下:
sub get_dir {
opendir(DIR,$dir) || return;
foreach my $files (readdir DIR) {
push @file,$files."\n";
}
closedir (DIR);
$t->insert("end", @file);
}
此函数独立运行没问题,在点击“load”按钮时文件名还是显示不完全,不知道TK的-command在调用get_dir时是怎样的机理?
谢谢两位的回答!
应该是逻辑错误。
在文本框内显示出来的文件是有规则的间隔出现,但只运行readsub 这个函数是完全没问题的,可以打印出当前目录下的文件数量和文件list。
关于perl 读取文件的疑惑:
Subdir --File2 File3 Subdir2--File4 因为你进了 Subdir 就没再出来过;所以显示不全 &get_dir 逻辑有问题; 用 File::Find
关于perl读取2进制文件的问题
path='D:\\1'; #路径$path=~s\/\\\\\/\\\/\/g; opendir D, "$path" or die $!; open O,">name.txt" or die $!;@filename=grep(!\/\\.\\.?$\/, readdir D); @files = sort{ -M "$path\/$b" <=> -M "$path\/\/$a" } @filename;foreach $file (@files) {print O "$file\\...
perl中:实用钻石操作符,从2个文件中读取内容,为什么reverse的时候是a...
因为你的while结构决定了,是每读一个文件就反序输出,而不是都读进来再一次性的处理。你可以改一下,放一个临时变量:如 while(defined($s=<>)){$t.=$s;}$t=reverse($t);print "$t";
用Perl进行文件读写,怎样写入数据换行啊?就是这次写完,关闭,下次打开...
open函数将Perl文件变量与某Perl文件联系起来,提供访问Perl文件的接口,例如:open(MYVAR,"\/u\/file");如果Perl文件打开成功,则返回非零值,否则返回零。缺省地,open打开Perl文件用以读取其内容,若想打开Perl文件以写入内容,则在Perl文件名前加个大于号:open(MYVAR,">\/u\/file");向已有的Perl文件末尾添加内容用两个大...
用perl读取txt文件(英文诗) 统计单词数量 以及频率 并且指出出现位置...
$wordPos++; $totalWords++; $map{$word} = [] unless ( defined $map{$word} ) ; my $this = $map{$word}; push @{$this}, "$lineCount-$wordPos" ; } }print "There are total $totalWords in this context$\/";foreach my $word ( sort keys %map ) {...
在使用perl程序读取文件时,如何识别文件的开头和结尾
问题提问的不很明确。关于常用的文件头,文件尾的操作如下:跳到文件头。 seek FH, 0, 0;跳到文件尾: seek FH,0, 2;判断是否到达文件尾部: if(eof(FH)).
perl提取基因组染色体信息报错?
第11行和第13行,读取一个没有打开的文件句柄。你这帖过来也不知道是哪两行。大概率是这两个位置报错,而造成这个错误的原因,大概念是前面的那个<IN>;这句话把整个文件给读完了,所以后面读不到了。你这个程序哪抄的吧,自己完全没有理解其运行机制?感觉有很多毛病。
电脑在windows下写了一个perl脚本,是关于数据的的读取和输出的,但是...
其中test.pl是你所要运行的文件的名称用命令指示符则说不是内部或外部的命令。这个说明安装没有自动把perl的文件路径自动添加到环境变量中去。具体方法:右击我的电脑--属性--高级--环境变量--在系统变量部分--双击path--在最后添加你perl的安装路径。例如;C:\\Perl\\bin 另外一种方法,你也可以安装...
perl 远程文件读取
用LWP吧,看perl里面的lwp文档。如果是ftp的话,可用Net::FTP组件。看文档既可操作
intermediate perl 学习中关于哈希、引用、自引用部分(第五章最后一...
第一行:设定哈希变量%total_bytes 第二行:一行行读取文件 第三行:把输入行按照空格分割,前3列分别赋给$source, $destination, $bytes 第四行:$total_bytes{$source}{$destination} 是哈希变量%total_bytes的片段,$total_bytes{$source}{$destination} 是个二维哈希,$total_bytes{$source}是...