![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
初めて記載します。宜しくします。
perlでプログラムするのが初めてでなので、大分間違ってるかもしれません。
※UNIX環境でシェルで日付差分(yyyymmddhhmmss)を求めたいのですが、「date -d」コマンドは使用出来ません。
シェルを実行しコマンドラインにて入力された【引数1】:実行区分(1 or 2)【引数2】:日付(yyyymmddhhmmss)、【引数3】:日付(yyyymmddhhmmss)と区分をperlに引数として渡して、perlでは"引数3-引数2"をして日数を算出しファイルに出力させたいです。
perl名:MCPFZAR_Compl.pl
実行コマンド例: perl MCPFZAR_Compl.pl 1 20110302000000 20110306000000
以下にperlのプログラムを掲載します。
#!/opt/perl/bin/perl
⇒入力パラメータチェック実行
# 日付1を年、月、日、時、分、秒に切り分け
$L_Year = int(substr($ARGV[1],0,4));
$L_Mon = int(substr($ARGV[1],4,2));
$L_Day = int(substr($ARGV[1],6,2));
$L_Hour = int(substr($ARGV[1],8,2));
$L_Min = int(substr($ARGV[1],10,2));
$L_Sec = int(substr($ARGV[1],12,2));
# 取得日付チェック関数を実行する。
($L_Ret, $L_Ret_Msg) = &MCPFLCF_DayExists($L_Year, $L_Mon, $L_Day, $L_Hour, $L_Min, $L_Sec);
# 異常終了した場合
if( $L_Ret != 0 ){
# エラーを返却する。
return ($L_Error_End, "$L_Err_MSG_4 [$L_Ret_Msg]");
}
# 日付1を秒に変換
$L_Time1 = timelocal($L_Sec, $L_Min, $L_Hour, $L_Day, $L_Mon - 1, $L_Year);
⇒同様に日付2も変換
# 日付1と日付2の差分を取る。
$L_TimeRet = ($L_Time2 - $L_Time1);
# ファイルに書き込む為に、ファイルopenしてから書込み
open (OUT,"> $outfile");
# 結果形式種別が1の場合
if($ARGV[0] == 1){
# 結果を日数で参照渡しする。
$L_LET = int($L_TimeRet / (60 * 60 * 24));
print OUT "$outfile";
}
# 結果形式種別が2の場合
elsif($ARGV[0] == 2){
# 結果を秒で参照渡しする。
$L_LET = $L_TimeRet;
print OUT "$outfile";;
# CLOSEする
close(OUT);
シェルを実行すると、エラーにはなりませんが
ファイルの出力もされません。
かなりどうしたらよいかわからない状態なので回答宜しくお願い致します。
足りない情報がありましたらご教授願います。
No.1ベストアンサー
- 回答日時:
載せていただいたコードを元に作ってみました。
(簡略化しています)■動作確認をしたコード============
#!/usr/bin/perl
use Time::Local;
use warnings;
#---------------------
# 引数の取得とか
#---------------------
$L_Year = int(substr($ARGV[1],0,4));
$L_Mon = int(substr($ARGV[1],4,2));
$L_Day = int(substr($ARGV[1],6,2));
$L_Hour = int(substr($ARGV[1],8,2));
$L_Min = int(substr($ARGV[1],10,2));
$L_Sec = int(substr($ARGV[1],12,2));
$outfile = "./result.txt";
#---------------------
# 差分を取得
#---------------------
$L_Time1 = timelocal($L_Sec, $L_Min, $L_Hour, $L_Day, $L_Mon - 1, $L_Year);
$L_Time2 = timelocal($L_Sec, $L_Min, $L_Hour, $L_Day + 1, $L_Mon - 1, $L_Year);
$L_TimeRet = ($L_Time2 - $L_Time1);
#---------------------
# 差分をファイルに出力
#---------------------
open (OUT,"> $outfile");
if($ARGV[0] == 1){
$L_LET = int($L_TimeRet / (60 * 60 * 24));
print OUT "$L_LET";
}
elsif($ARGV[0] == 2){
$L_LET = $L_TimeRet;
print OUT "$L_LET";
}
close(OUT);
======================
■気になったところ
・OUT "$outfile" だとファイルのパスをファイルに書きこむ?$L_LETの間違い?
・$outfile(書き込むファイルのパス)が定義されていない?
use warnings; を始めに宣言しておくと、エラー部分を教えてくれますよ。
回答ありがとうございます。参考にさせて頂きました。
perlのUNIXTIME処理を使用するには、
シェルでtimelocal関数を呼び出し、以下のように実行すればOKでした。
例.
perl -e 'use Time::local;$unixtime=timelocal('&sec','$min','$hour','$day','$(expr $month - 1)', '$(expr $year -1900)',0,0,0);print $unixtime'
tounixtimeを呼び出す際に、引数をそれぞれ設定するとUNIXTIMEが取得できます。
後は日付1、日付2をそれぞれUNIXTIMEに変換して、マイナスすれば
OKでした。
丁寧な回答ありがとうございます。
またよろしくお願いしますね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C言語 3 2022/10/04 15:07
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- C言語・C++・C# C言語について コマンドラインで >変数 12.00 (char型) と、小数点付きの値を共用体に渡 1 2022/04/22 16:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プロシージャの戻り値を取得す...
-
PerlとPHPのサーバーへの負担に...
-
Perlソースコードをコンパイル...
-
Excel VBAでリンク切れをチェッ...
-
Excel VBA 『Call』で呼び出す...
-
例外処理のフローチャートの記...
-
ユーザー定義関数に#NAME?が返...
-
VBAでoutlook365が起動しません。
-
VBAで別モジュールへの変数の受...
-
モジュールの最大数はいくつな...
-
ユーザーフォームに最小化・最...
-
VBでグローバル変数を宣言するには
-
'Range'メソッドは失敗しました
-
Excel VBAで、ユーザーフォーム...
-
サブルーチンを認識しません。
-
エクセルVBAでシートモジュール...
-
Excelシート内セル記述の違いに...
-
perl起動方法
-
【vba】フォームに書いてあ...
-
Excel VBA 定義されたプロージ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perlソースコードをコンパイル...
-
プロシージャの戻り値を取得す...
-
system関数を使用してJava実行...
-
Perlで環境変数を設定するには
-
Perlのexitについて
-
Windows版Perlの標準入力&標準...
-
perl/tkを使って作ったGUIを実...
-
-i -e "s|^.|ok|" ./text どこ...
-
Perlでのプログラム実行方法
-
perlで 引数1を別リストの複数...
-
MediBang Paint Proについて
-
cgiを実行可能にするには
-
UNIX SUN Solarisで時間の演算
-
perlでコマンドプロンプト実行
-
テキストファイルに書き込めな...
-
pp (Perl Packager) で require...
-
Perl リスト内指定回数繰り返し
-
ActivePerlで#!/usr/bin/が無効
-
perlからcを呼び出す
-
CGI Chart::Gnuplotの使用法
おすすめ情報