2016-12-07 8 views
-2

私は、テキストファイルの内容をMySQLデータベースにロードしています。私はテーブルを正しくロードしましたが、単にテーブルの見出しである最初の行をスキップすることはできませんでした。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 
+2

'next if $。 == 1; '直後' while(...){' –

+0

残念ながらそれはうまくいきませんでした。そのコマンドは何をすべきか? – Elley

+2

それはうまくいきますが、[mcve]がなければ、あなたをさらに助けることは不可能です。 –

答えて

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 

注:

  • $.は、最後にアクセスされたファイルハンドルの現在の行番号を参照する特別な変数です。
  • splitは、パターンが省略されている場合や空白文字が1つの場合、特別な空白モードを持ちます。
+0

@Elley http://stackoverflow.com/help/someone-answers –

4

@Mattヤコブのコメントはあなたの問題を解決します。

$.は、ファイルの現在の行番号を示します。 Here about next

while (<$fh>) 
{ 
    if($. == 1) #@Matt Jacob written in one line 
    { 
     next; 
    } 

    # do your stuff 

} 

必ずプログラムの先頭にuse warnings;use strict;を追加します。

ファイルハンドルに3つの引数を使用します。

そしてこれらは、正規表現のグループ化に使用される変数名として$1 $2 $3を使用しないでください。

は最後にフォローがデータベースのものを無視して、あなたの問題

open my $fh, "<", "Filename.txt"; 
<$fh>; #Here removing the first line 

while (my $line = <$fh>) 
{ 
    chomp $line; 
    .. 
    do you stuff..