電子書籍の厳選無料作品が豊富!

perlでCSVファィルの加工するプログラムを作ろうと思っております。
プログラム初心者な為どれから手を付ければ良いのか
判りません。
宜しければ サンプル等作っていただければありがたいです。

1.指定されたフォルダの中の
最新更新日付のファイルを読み込みむ
2.5分置きに可変CSVで出力されるデータを出力を
10分単位の固定CSVへ出力する
3.出力の際には以下の固定数字、時間、文字、数字等を入れ
加工した上で固定系CSVの出力をしたいです。


・固定の数字20450△△△,
・固定の数字 01,  
・年月日時間    YYMMDDhhmm,
・固定数字 01,
・固定文字 TP,
・固定数字 01,
・固定文字 +か-,
 元データが△△△19.2の場合は+を出力  -19.2の場合は-を出力 
 4カラム目を19.5 の場合△△195
・固定文字 TA,
・固定数字 01,
・固定文字 +か-,
 元データが△△△12.2の場合は+を出力  -12.2の場合は-を出力 
 4カラム目を19.5 の場合△△195


入力のファイル名 20110301.csv
ファイルの中身

17549,2011/3/25,0:00:00,19.5,12.2
17550,2011/3/25,0:05:00,19.6,12.2
17551,2011/3/25,0:10:00,19.5,12.2
17552,2011/3/25,0:15:00,19.5,12.2
17553,2011/3/25,0:20:00,19.4,12.2
17554,2011/3/25,0:25:00,19.4,12.2
17555,2011/3/25,0:30:00,19.4,12.2
17556,2011/3/25,0:35:00,19.3,12.2
17557,2011/3/25,0:40:00,19.3,12.2
17558,2011/3/25,0:45:00,19.2,12.2
17559,2011/3/25,0:50:00,-19.2,12.2


出力のファイル名 10_200203.dat
20450 , 01,201103250010,1,TP,1,+ 195,TA,1,+ 122
20450 , 01,201103250010,1,TP,1,+ 195,TA,1,+ 122
20450 , 01,201103250020,1,TP,1,+ 194,TA,1,+ 122
20450 , 01,201103250030,1,TP,1,+ 194,TA,1,+ 122
20450 , 01,201103250040,1,TP,1,+ 193,TA,1,+ 122
20450 , 01,201103250050,1,TP,1,+ 192,TA,1,+ 122

A 回答 (1件)

とりあえず、正しい出力結果がほしいです。


入力ファイルの情報に提示された条件を適用しても出力ファイルの情報にはならないと思います。

出力情報のおかしいところ
- 5分 → 10分 丸めるときは先優先であとのやつは削除でよいの?
- 19.2 とか12.2の小数点はどこへ消えたの?
- 00:50出力の+-の符号間違えてる?
- 19.5のとき符号いらないんじゃなかったの?

ここからは、コーディングの基本となりますが
こういった変換系処理の場合、
自分がプログラムになった気持ちで一つ一つ順番に変換してみてください。
どうすれば、出力結果ができあがるか、変換条件と自分した変換が一致しているのか
検証してみるとよいです。
自分の手操作で変換が出来るようになれば、あとは、その手操作の部分を列挙することで
プログラムができあがると思います。

イメージ的に必要そうなのは
1. 行単位の読み込み
2. カンマ区切りにするための split()
3. 丸めるための文字列置換(時分秒をhhn000)
4. 固定長出力用のsprintf()
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!