Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用perl创建x个文件?_Perl - Fatal编程技术网

如何使用perl创建x个文件?

如何使用perl创建x个文件?,perl,Perl,我想创建一个指定数量的文件,范围为1..10000000,包含“一些文本”,如何在perl中实现这一点 提前谢谢 你可以用与其他语言相同的方法来做这件事。将作业分解为一系列可实施的小步骤: 循环: 打开文件并将文本写入其中 因此,您可能有如下代码: my $count = 0; while( $count < 10000 ) { open(my $fh, '>', "output.$count") or die "Failed to open file: $

我想创建一个指定数量的文件,范围为1..10000000,包含“一些文本”,如何在perl中实现这一点


提前谢谢

你可以用与其他语言相同的方法来做这件事。将作业分解为一系列可实施的小步骤:

  • 循环:
  • 打开文件并将文本写入其中
因此,您可能有如下代码:

my $count = 0;
while( $count < 10000 )
{
    open(my $fh, '>', "output.$count") 
      or die "Failed to open file: $!";
    print $fh "sometext\n";
    close( $fh );

    $count += 1;
}
my$count=0;
而($count<10000)
{
打开(my$fh,“>”,“output.$count”)
或“无法打开文件:$!”;
打印$fh“sometext\n”;
收盘价($fh);
$count+=1;
}
试试这个:

 my $count = 3;
 for (my $i = 0; $i < $count; $i++) {
    open(my $f, ">>file$i.txt") or die("couldn't open file$i.txt");
    print $f "some text";
    close($f); 
 }
my$count=3;
对于(我的$i=0;$i<$count;$i++){
打开(我的$f,“>>文件$i.txt”)或死亡(“无法打开文件$i.txt”);
打印$f“一些文本”;
结束(f美元);
}

尽管您可以在一个目录中创建1000万个文件,但这是不可取的,因为查看该目录会很麻烦。ls在几个小时内不会返回,文件名上的bash auto complete将挂起,一般来说,您需要关闭终端才能再次使用它

考虑跨多个目录对文件进行分区。您可以使用md5、sha1、对一些数字进行模化、文件名中的n位数组等来实现分区。最好将任何目录中的文件总数保持在几千个以下

下面是一个使用md5的示例:

use File::Path qw( make_path );
use Digest::MD5 qw( md5_hex );

use constant DIRECTORY_ROOT => '/path/where/you/want/these/files';
use constant FILE_SEP       => '/';
use constant MAX_FILES      => 10;

for my $count ( 1 .. MAX_FILES ) {
    my $subdir = substr( md5_hex($count), 0, 2 );    # First 2 characters

    my $dir = join FILE_SEP, DIRECTORY_ROOT, $subdir;
    make_path( $dir );
    my $file = join FILE_SEP, $dir, $count;

    open( my $fh, '>', $file )
        or die "Failed to open file $file : $!";
    print $fh "some text\n";
    close($fh);
}
这将创建以下一组文件:

./c9
./c9/8
./16
./16/6
./ec
./ec/3
./c8
./c8/2
./e4
./e4/5
./a8
./a8/4
./d3
./d3/10
./8f
./8f/7
./45
./45/9
./c4
./c4/1

那么,是什么阻止了你?打开相关的文件句柄并进行书写。如果你在家庭作业方面遇到问题,至少向我们展示你所做的尝试,而不是要求我们去做。谢谢你的快速回复!实际上,您可以使用
foreach我的$i(1..100000){…
这里,perl不会为您预先分配列表。谢谢!这就是我要找的!使用perl怎么样?
foreach我的$i(1..$count){open(my$fh,“>”,“file$i.txt”)或die“无法创建文件$i.txt:$!”打印{$fh}“一些文本”;关闭$fh;}
让我们教她正确的Perl:C风格和不必要的使用${i}是令人困惑的,但是2个参数打开,没有任何错误检查,这是错误的。我仍然喜欢我的C风格,但你的其他评论是完全正确的。更新了两个修复程序:3个参数打开,并在错误消息中显示$!你就完成了;--)