![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
たびたびの質問ですみません。
初心者のため文法が理解できていないのか、今度はデータの読み込みでうまくいきません。
記述中の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ランキング
-
openした後、closeしないでプロ...
-
perlの構文でカンマの意味が分...
-
perlをバージョンアップしたら...
-
cgiでサーバーにファイルを追加...
-
Perlで、「が」を、「...
-
Perlのエラーについてご教授く...
-
Perl の外部モジュールの利用方法
-
こんにちは ブラケッツでプログ...
-
Perl言語について。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perlで特定行から特定行までを...
-
perlでcsvファイルを読む(ダブ...
-
Perlの初心者です。2重ループ...
-
CSVデータの編集の際の重複チェ...
-
ファイル分割2
-
perlでファイルの比較
-
パイソンでCSVファイル場所を指...
-
foreachの制御
-
Perlで空白行を削除
-
excel→txtファイル作成時、セル...
-
MATLAB std::exceptionエラー
-
Argument "\\\\n" isn't numeri...
-
FTP接続時失敗時、接続先名をcs...
-
ExcelをCSV書き出す場合のシー...
-
VBAでCSVファイルを途中行まで...
-
VBAでCSVファイルの特定行を書...
-
batファイルでrenameができませ...
-
awkスクリプトでダブルクォーテ...
-
バッチファイルの作り方(CSV→...
-
エクセルVBA コードが同じでも...
おすすめ情報