我写了一个程序来检查文本文件中的拼写错误或未使用的数据。现在,我想使用相同的过程检查目录中的所有文件。
以下是我为第一个文件运行的几行脚本:
open MYFILE, 'checking1.txt' or die $!;
@arr_file = <MYFILE>;
close (MYFILE);
open FILE_1, '>text1' or die $!;
open FILE_2, '>Output' or die $!;
open FILE_3, '>Output2' or die $!;
open FILE_4, '>text2' or die $!;
for ($i = 0; $i <= $#arr_file; $i++) {
if ( $arr_file[$i-1] =~ /\s+\S+\_name\s+ (\S+)\;/ ) {
print FILE_1 "name : $i $1\n";
}
...
我只使用一个文件checking1.txt
来执行脚本,但现在我想对all_file_directory
答案 0 :(得分:2)
使用数组存储文件名,然后循环它们。在循环结束时重命名输出文件或将它们复制到某处,以便在下一次迭代中不会被覆盖。
my @files = qw(checking1.txt checking2.txt checking3.txt checking4.txt checking5.txt);
foreach my $filename (@files){
open (my $fh, "<", $filename) or die $!;
#perform operations on $filename using filehandle $fh
#rename output files
}
现在要完成上述工作,您需要确保文件位于同一目录中。如果没有,那么:
@files
数组如果要遍历目录,请参阅:
此外:
并给出变量的正确名称。例如:
@arr_file = <MYFILE>;
应该写成
@lines = <MYFILE>;
答案 1 :(得分:2)
您在同一目录中的所有文件意味着将程序放在目录中然后运行它。
要从目录中读取文件,请使用glob
#include<stdio.h>
void sort(const void* d1, const void* d2)
{
int a = *(int*)d1;
int b = *(int*)d2;
if (a > b)return 1;
if (b > a)return -1;
return 0;
}
int main()
{
int abc[3];
printf("Enter three numbers: ");
scanf("%d%d%d", &abc[0], &abc[1], &abc[2]);
qsort(abc, 3, sizeof(int), sort);
printf("%d\n", abc[2] - abc[1]);
while (1){}
return 0;
}
答案 2 :(得分:0)
为什么不use
File::Find
?使目录中的文件更改非常容易。只需提供开始目录。
它并不总是最佳选择,取决于您的需求,但几乎每次我需要同时修改大量文件时它都很有用且简单。
另一种选择是循环浏览文件,但在这种情况下,您必须提供文件名。
由于mkHun指出glob
可能会有所帮助。