Mysql 如何创建循环以将完成的文件发送到不同的目录(已关闭)
因此,我创建了一个脚本,它将在其中为每个文件在表“Top”中执行一个insert语句。因此,我现在面临的问题是如何创建一个脚本,将完成的(已经成功地将数据插入表中的)文件发送到一个目录 我只展示了重要的一句话:U 我还是新手,所以请容忍我的愚蠢Mysql 如何创建循环以将完成的文件发送到不同的目录(已关闭),mysql,perl,dbi,Mysql,Perl,Dbi,因此,我创建了一个脚本,它将在其中为每个文件在表“Top”中执行一个insert语句。因此,我现在面临的问题是如何创建一个脚本,将完成的(已经成功地将数据插入表中的)文件发送到一个目录 我只展示了重要的一句话:U 我还是新手,所以请容忍我的愚蠢 #!/usr/bin/perl use warnings; use DBI; use strict; use autodie; use Data::Dumper; our $DIR="/home/aimanhalim/LOG"; our $F
#!/usr/bin/perl
use warnings;
use DBI;
use strict;
use autodie;
use Data::Dumper;
our $DIR="/home/aimanhalim/LOG";
our $FILENAME_REGEX = "server_performance_";
# mariaDB config hash
our %db_config = ( "username"=>"root", "password"=> "", "db"=>"Top_Data", "ip" => "127.0.0.1", "port" => "3306");
main();
exit;
..............................................................................
my ($result) = insert_record($dataRef,\%db_config);
#
# close file
close($file_hndlr);
#
# move file to DONE dir
#
# continue until file completed
last;
}
..............................................................................
sub insert_record(){
my($data,$db_config)=@_;
my $result = -1; # -1 fail; 0 - succ
# connect to db
# connect to MySQL database
my $dsn = "DBI:mysql:database=".$db_config->{'db'}.";host=".$db_config->{'ip'}.";port=".$db_config->{'port'};
my $username = $db_config->{'username'};
my $password = $db_config->{'password'};
my %attr = (PrintError=>0,RaiseError=>1 );
my $dbh = DBI->connect($dsn,$username,$password,\%attr) or die $DBI::errstr;
print "We Have Successfully Connected To The Database \n";
..............................................................................
# execute insert
my $sql = 'insert into Top(Load_Average, CPU_User, CPU_ID, CPU_System, CPU_Waiting, Memory_Total, Memory_Used, Swap_Total, Swap_Available) values(?,?,?,?,?,?,?,?,?)';
my @param_bind = ();
my $stmt =$dbh->prepare($sql) or die "Its A Fail" . $dbh->errstr();
$param_bind[0] = $data->{'Average_Load'}->{'List_1'};
$param_bind[1] = $data->{'Cpu_List'}->{'User'};
$param_bind[2] = $data->{'Cpu_List'}->{'ID'};
$param_bind[3] = $data->{'Cpu_List'}->{'System'};
$param_bind[4] = $data->{'Cpu_List'}->{'Waiting'};
$param_bind[5] = $data->{'Memory_List'}->{'Total'};
$param_bind[6] = $data->{'Memory_List'}->{'Used'};
$param_bind[7] = $data->{'Swap_List'}->{'Total'};
$param_bind[8] = $data->{'Swap_List'}->{'Available'};
$stmt->execute(@param_bind);
$stmt->finish();
print "The Data Has Been Inserted Successfully\n";
$result = 0;
return($result);
# commit
$dbh->commit();
# return succ / if fail rollback and return fail
$dbh->disconnect();
}
exit;
看
当移动失败时,您也可以选择立即中止程序,只需替换为
循环是while
循环,如中所示
我只是展示了重要的一行
事实上,我认为你已经向我们展示了不重要的台词。你已经向我们展示了你知道怎么做的部分,而不是你遇到麻烦的部分
我现在遇到的问题是如何创建一个脚本,将已完成的(已成功将数据插入表中的)文件发送到一个目录
您没有向我们显示任何处理文件的代码。我假设您正在打开一个文件并使用其内容填充
$dataRef
变量。一旦你处理完这些数据,你就可以用它来移动你的文件。这个问题系列的前几篇文章:通常我不会指出它们,因为它们在帐户历史记录中很明显,但这里涉及到一个帐户切换。如果你愿意,帐户可以合并:那是这样的:我在问如何在脚本插入MySQL之后移动文件…我的坏问题我觉得这是脚本中最重要的问题抱歉再次。。。我使用了“移动”,但每次执行只移动一个文件。@mitekyle:每次执行只移动一个文件是的,这就是它的工作原理。但为什么这是一个问题?完成后只需移动每个文件。但我的讲师希望它只执行一次,直到所有文件都在目录中完成。我尝试过,但每次执行只移动一个文件
use File::Copy qw(move);
⋮
move($entry, $DONE_directory) or
warn "Could not move file '$entry' into '$DONE_directory': $!";