2017-01-17 19 views
0

SQLクエリのいくつかの結果を反復しようとすると、最初のエントリが表示されません。以下は、クエリの入力が異なる外部ループにあります。いくつかのバージョンは1行を戻し、他のバージョンは10まで戻しますが、最初の行は常に欠落しています。 "Current entry"から始まる表示行は常に2から始まります。Perl配列はゼロから始まりますが、 "foreach"は特定の数値を要求しません。各配列要素を表示するだけです。私はここで間違って何かをしていますか?配列出力の最初の行が見つかりません

ありがとうございました。

$OurSQL = "select DISTINCT BORROWER.BARCODE, POST_CODE, SURNAME, FIRST_NAMES, "; 
    $OurSQL = $OurSQL."LOAN.CREATE_LOCATION FROM ADDRESS, CONTACT_POINT, BORROWER "; 
    $OurSQL = $OurSQL."left join LOAN on (BORROWER.BORROWER_ID = LOAN.BORROWER_ID) "; 
    $OurSQL = $OurSQL."where (BORROWER.BORROWER_ID = CONTACT_POINT.BORROWER_ID) and "; 
    $OurSQL = $OurSQL."(CONTACT_POINT.ADDRESS_ID = ADDRESS.ADDRESS_ID) and "; 
    $OurSQL = $OurSQL."(upper(BORROWER.SURNAME) = upper('".$sname."') and upper(BORROWER.FIRST_NAMES) = upper('".$fname."')) and "; 
    $OurSQL = $OurSQL."(ADDRESS.POST_CODE = '".$postcode."') AND (LOAN.CREATE_DATE >"; 
    $OurSQL = $OurSQL."dateadd(year, -1, getdate())) ORDER BY POST_CODE, SURNAME, FIRST_NAMES, CREATE_LOCATION"; 

$lib = 0; 
    (@our_usage) = &sql($d, $OurSQL); 
    # Iterate through array returned for the current borrower 
    foreach $entry (@our_usage) 
    { 
    # Put current line into our variables 
    $lib++; 
    print "Current entry ($lib): $entry\n"; 
    ($ourbcode, $ourpcode, $oursname, $ourfnames, $ourloc) = split('~', $entry); 
    $ourline = "$ourbcode $ourpcode $oursname $ourfnames $ourloc"; 
    # Show each line on screen 
    print $ourline."\n"; 
    print OUT $ourline."\n"; 
    } # End of results loop 
+0

'$ libに++;'あなたは 'index' '0'の' element'ではなく、その後 'index' '1'の要素の値を最初に印刷し増加しています、 'print'文の後に移動します。 – AbhiNickz

+0

最初の 'print'行の後に'; next;を入れます。それは何を示していますか? – Borodin

+1

@AbhiNickz:あなたはそうだけど、OPはこう言っている: ""現在のエントリー "から始まるディスプレイラインは常に2インチから始まる*。あなたのコメントはそのことを説明していません。 – Borodin

答えて

0

正確に何がうまくいかないかを見るための十分なコードはありません。 sql()を呼び出すのではなく、固定ストリングを使って機能する完全なスクリプトです

$ cat x.pl 
#!/usr/bin/env perl 

use warnings; 
use diagnostics; 
use strict; 

# ...your other code here... 

my @our_usage = ("a~b~c~d~e", "1~2~3~4~5", "R~S~T~U~V"); 
# Iterate through array returned for the current borrower 
my $lib = 0; 
foreach my $entry (@our_usage) 
{ 
    # Put current line into our variables 
    $lib++; 
    print "Current entry ($lib): $entry\n"; 
    my ($ourbcode, $ourpcode, $oursname, $ourfnames, $ourloc) = split('~', $entry); 
    my $ourline = "$ourbcode $ourpcode $oursname $ourfnames $ourloc"; 
    # Show each line on screen 
    print $ourline."\n"; 
} # End of results loop 

サンプル実行:

$ perl ./x.pl 
Current entry (1): a~b~c~d~e 
a b c d e 
Current entry (2): 1~2~3~4~5 
1 2 3 4 5 
Current entry (3): R~S~T~U~V 
R S T U V 
関連する問題