0

データベースに 2 つの列を照会し、それらを .csv ファイルに書き込んでいます。私が抱えている問題は、以下のコード行がこのエラーを引き起こしていることです:「105行目の文字列で初期化されていない値を使用しています」。

print $file "$hash_ref->{'UserNM'}" . join("\t", "$hash_ref->{'EventDT'}" . "\n");

私が探しているのは、ファイル内の次のようなものです。

ユーザー ID    最終ログイン タイムスタンプ
ユーザー12 2012-12-27 12:21:12
user49 2011-06-13 12:21:12
ユーザー43 2010-09-15 12:21:12
user09 2013-01-07 12:21:12
user87 2012-08-12 12:21:12
ユーザー38 2013-01-07 12:21:12
ユーザー31 2009-04-30 12:21:12

さらにコードが必要かどうか尋ねてください。

4

4 に答える 4

2

ハッシュ値の 1 つが定義されていません。これを試して:

printf $file "%s\t%s\n", $hash_ref->{'UserNM'} // q{}, $hash_ref->{'EventDT'} // q{};

q{}値が定義されていない場合は、デフォルトで空の文字列 ( ) になります。

于 2013-01-07T17:56:56.573 に答える
0

これはまだ機能していないようです。印刷を試みる前に、$hash_ref->{'UserNM'}と$hash_ref->{'EventDT'}の両方が定義されているかどうかをデバッグの目的で確認すると役立つ場合があります。これにより、各変数にフォールバックのデフォルト値を与えることができ、少なくともいくつかの出力を分析することができます。

my $UserNM;
my $EventDT;

if (defined($hash_ref->{'UserNM'})) {
    $UserNM = $hash_ref->{'UserNM'};
} else {
    $UserNM = "default username";
}

if (defined($hash_ref->{'EventDT'})) {
    $EventDT= $hash_ref->{'EventDT'};
} else {
    $EventDT= "default event date";
}

print $file "$UserNM" . join("\t", "$EventDT" . "\n");
于 2013-01-07T22:01:17.700 に答える
0

@gpojd が指摘したように、ハッシュ参照の 1 つが定義されていません。IFNULL/ISNULLまた、クエリに各フィールドのステートメントを含めて、フィールドNULLを空白に設定するだけにすることもできます。

于 2013-01-07T18:00:11.763 に答える
0

連結を単純化し、次のコードを使用して列を変数として渡すことにしました。

    my $usernm = "$row->{'UserNM'}";
    my $logindt = "$row->{'EventDT'}";

    # ユーザーと最終ログインのタイムスタンプをファイルにダンプする
        print MYFILE "$usernm \t $logindt \n";

私の意見では、これははるかにシンプルでクリーンです。そして、それは機能します。同意しない人はいますか?

于 2013-01-08T18:57:28.200 に答える