我正在将文本文件的内容加载到MySQL数据库中。我已经正确加载了表格,但我还没有能够跳过第一行,这只是表格的标题。
这里是我编写的代码,考虑了该线程的所有注释。我添加了一行
if($. == 1) {
我打开文件后跳过文本文件的标题,但它似乎仍无法正常工作。
感谢大家的耐心等待。
有什么建议吗?
#!/usr/bin/perl -w
use DBI;
use strict;
use Data::Dumper;
my $user = shift @ARGV or die $!;
my $password = shift @ARGV or die $!;
my $database = shift @ARGV or die $!;
my $recipient_ewes = shift @ARGV or die $!;
my $dbh = DBI->connect("DBI:mysql:$database:localhost",
$user,
$password,
{RaiseError => 1}
);
open (FILE, "rid.txt") or die $!;
while (<FILE>) {
if($. == 1) {
next;
}
my $GID;
my $RID;
my $number;
my $line = $_;
chomp $line;
my @array = split("\t",$line);
if (scalar(@array)==4){
$RID = $array[0];
$GID = $array[2];
$number = $array[3];
my $sth = $dbh-> prepare (qq{insert into $recipient_ewes (GID, RID, numbertransferred) values ("$GID", "$RID", "$number")});
$sth -> execute ();
$sth -> finish ();
}
}
$dbh->disconnt ();
exit;
close FILE;
输入文件是:
Recipient ID Round Group # # of transfers
6507 1 2 4
5101 1 4 4
5007 1 5 3
6535 2 6 4
6510 2 7 4
答案 0 :(得分:4)
@Matt Jacob评论将解决您的问题。
$.
给出文件的当前行号。 Here about next
while (<$fh>)
{
if($. == 1) #@Matt Jacob written in one line
{
next;
}
# do your stuff
}
始终在程序顶部添加
use warnings;
和use strict;
。对文件句柄使用三个参数。
然后不要将$1 $2 $3
用作变量名称,这些名称将用于正则表达式分组。
最后,以下将有助于解决您的问题
open my $fh, "<", "Filename.txt";
<$fh>; #Here removing the first line
while (my $line = <$fh>)
{
chomp $line;
..
do you stuff..
答案 1 :(得分:0)
忽略数据库内容,这里是如何在阅读文件时跳过第一行:
use strict;
use warnings;
while (<DATA>) {
next if $. == 1;
my ($RID, undef, $GID, $number) = split;
print join(', ', $RID, $GID, $number), "\n";
}
__DATA__
Recipient ID Round Group # # of transfers
6507 1 2 4
5101 1 4 4
5007 1 5 3
6535 2 6 4
6510 2 7 4
输出:
6507, 2, 4
5101, 4, 4
5007, 5, 3
6535, 6, 4
6510, 7, 4
注意: