
たびたびの質問ですみません。
初心者のため文法が理解できていないのか、今度はデータの読み込みでうまくいきません。
記述中のcgiファイルと同じディレクトリにdata.datというファイルがあり、そのファイルには三行のデータが記述されています。
内容は下記の内容です。
---以下から---
2006,03,18,,1800,グランド代,鈴木,公園,練習
2006,03,19,1500,,部費,加藤,#1鈴木,2006年度
2006,03,25,1500,,部費,加藤,#2太田,2006年度
---以上まで---
このデータを各変数に割り当てたいのですが、うまくいきません。
下記のように記述していますが、いかがなモノでしょうか?
---以下から---
$fileline = 0;
open FD, "<data.dat" || die $!;
while (<FD>) {
$fileline++;
}
close FD;
open(FILE, "<data.dat") or printErrorPage("データファイルが開けません。");
eval{ flock(FILE, 1); };
@data = <FILE>;
close FILE;
for($k=0; $k<$fileline; ++$k){
($year,$month,$date,$in,$out,$mono,$member,$etc1,$etc2) = split(/\,/, $data[$i]);
$totalin = $totalin + $in[$k];
$totalout = $totalout + $out[$k];
}
$totalinout = $totalin - $totalout;
---以上まで---
最終的に$totalinには1500と1500が足されて3000と入って、$totaloutには1800と入って、$totalinoutには3000から1800が引かれて1200と計算されるようにしたいのです。
No.2ベストアンサー
- 回答日時:
直接的な原因は、
>split(/\,/, $data[$i]);
で、未使用の変数 $i を使用しているためです。
---------------------------------------------------------------
open(FILE, "<:encoding(Shift_JIS)", "data.dat") or printErrorPage("データファイルが開けません。");
eval{ flock(FILE, 1); };
while(<FILE>){
($year,$month,$date,$in,$out,$mono,$member,$etc1,$etc2) = split/,/;
$totalin += $in;
$totalout += $out;
}
close FILE;
$totalinout = $totalin - $totalout;
No.1
- 回答日時:
がると申します。
んっと…あちこち突っ込みどころはあるのですが(苦笑
まず、最初の6行は不要に見えるのですが如何なものでしょう?
ファイルの行数を取るだけなら、その後に出てくる@data配列の個数を調べれば等価だと思います。
もし「for文のため」であるならば、foreachというものを調べてみてください。多分「ああこんな便利なものが…」になると思うので。
後は、デバッグプリントを入れてみるとよろしいかと。
print文をあちこちに埋め込んで、そのときの変数の状態を調べます。
例えばfor文の直後に
print $data[$i] . "\n";
とやれば、現在扱おうとしている文字列がはっきりしますし。
ちぃと大変かもしれませんが、頑張ってください。
参考書を片手に、そして、他の方が作成したスクリプトを参考にしていました。
いわゆるデバッグプリントはやっているのですが、埋め込む場所がまるで意味がないところでした。
foreach、これから調べてみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlでcsvファイルを読む(ダブ...
-
Perlで特定行から特定行までを...
-
Windowsで複数のファイルを同じ...
-
close()で例外が投げられる理由
-
エクセルVBA コードが同じでも...
-
バッチファイルの作り方(CSV→...
-
VB6.0でDB接続する際に切断時の...
-
ファイル全てを .xlsm に変更し...
-
batファイルでrenameができませ...
-
csvファイルの横方向への改行に...
-
VBAでCSVファイルを途中行まで...
-
ディレクトリ名を取得したい
-
コマンドプロンプトからperlを...
-
perlをwindows環境でshift-jis...
-
MATLAB グローバル変数の宣言
-
パスから最後のディレクトリだ...
-
drtファイルはどうしたら開...
-
VBでファイル分割の方法
-
C言語で特定の行を抽出する方法...
-
動かなくなったのでJavaソース...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perlで特定行から特定行までを...
-
データ項目の並び替えについて
-
ファイルの入出力2
-
csvファイル(表計算的な処理)
-
データファイルからのデータの...
-
Cシェルでのファイル編集について
-
番号をつける
-
コマンド上の行間
-
データベースを使わず、テキス...
-
CSVファイルのデータの行数を取...
-
文字化け対策
-
Perlを利用してテキストフ...
-
CGIでのgrep関数においての質問
-
pealを用いたcsvファイルの抽出
-
perlでファイルの比較
-
perl:パターンマッチを使ったif...
-
ファイル分割2
-
MATLAB std::exceptionエラー
-
FTP接続時失敗時、接続先名をcs...
-
Perl 順位の重複
おすすめ情報