* 国データ [#j3cc581b] - ページ: [[罪罰改造板3]] - 投稿者: [[マーレス]] - 優先順位: 緊急 - 状態: 提案 - カテゴリー: エラーが出ます - 投稿日: 2008-05-21 (水) 18:12:28 - バージョン: ** メッセージ [#z1363bd8] 最近cdataが飛んでしまい国データがリセットされてしまうことがよくあります。 罪罰/国代表のログを移動させ何とか分散させて対処しようとconfig.cgiに$cdatfile2="./logdata/cdata2.cgi";を追加してlogdataのなかにcdata2.cgiを追加しました。 それでsystem.cgiのsub cdat_writeの中に$cdat2=〜;を作り、 sub cdata_openに open (IN,"$cdatfile2") || &error("国データファイルが開けませんでした",1); @cdat2 = <IN>; close(IN) or die "Can't close : $!"; を追加してみたんですがうまくできないので、他にどこを追加すればいいか教えていただけないでしょうか。 -------- - 同じsubの中に作るのでしたら、「IN」「OUT」を「IM」「AUT」とか別の文字に変更してみてはどうでしょうか? -- [[三毛]] &new{2008-05-22 (木) 09:37:02}; - sub cdat_writeとsub cdata_openともにIM,AUTのようにかえてみましたがまだうまく機能しないみたいです -- [[マーレス]] &new{2008-05-22 (木) 19:41:47}; - どのようにうまくいかないのかが分かると、レスしやすいかと思います。 -- [[三毛]] &new{2008-05-23 (金) 13:01:44}; - 申し訳ない。解りやすく言うとcn1とかcg1をcdat2に分けようとするとそのデータが消えてしまいます。表示画面には空白の状態になります。 -- [[マーレス]] &new{2008-05-23 (金) 17:38:29}; - 書いてないのですが、書き込みのほうはどのように追加していますか?>$cdat2=〜;以降の部分 -- [[三毛]] &new{2008-05-24 (土) 09:46:11}; - 指摘された通りに追加しましたので。 open (AUT,">>$cdatfile2") || &error("open error:$cdatfile2",1); print AUT $cdat2; close(AUT) or die "Can't close : $!"; -- [[マーレス]] &new{2008-05-24 (土) 10:08:42}; - openの方の$CP{〜〜}とかの割り当ての方は? -- [[三毛]] &new{2008-05-24 (土) 13:54:51}; - この辺がおかしいのかな? sub cdata_open{ open (IN,"$cdatfile") || &error("国データファイルが開けませんでした",1); @cdat = <IN>; close(IN) or die "Can't close : $!"; open (IM,"$cdatfile2") || &error("国データファイルが開けませんでした",1); @cdat2 = <IM>; close(IM) or die "Can't close : $!"; %CP = ''; my @prats = split(/,/,$cdat[0]); foreach $prats (@prats){ my($k,$v) = split(/;/,$prats); $CP{$k} = $v; } %CP = ''; my @prats = split(/,/,$cdat2[0]); foreach $prats (@prats){ my($k,$v) = split(/;/,$prats); $CP{$k} = $v; } -- [[マーレス]] &new{2008-05-24 (土) 13:56:45}; - 入れ込んでしまっているので、@pratsと@CPが上書きされてますね^^;; >先に $set=$CP{'set'}; $all_mem=$CP{'all_mem'}; 略 等を割り当てて、INを閉じてから、再びcdat2の方を呼び出し&割り当ててみると良いかと思います。 -- [[三毛]] &new{2008-05-24 (土) 15:10:17}; - ってか、割り当てる前に閉じちゃってません??^^;>close(IN) or die "Can't close : $!"; -- [[三毛]] &new{2008-05-24 (土) 15:15:28}; - こういう風になるんでしょうか? open (IN,"$cdatfile") || &error("国データファイルが開けませんでした",1); @cdat = <IN>; %CP = ''; my @prats = split(/,/,$cdat[0]); foreach $prats (@prats){ my($k,$v) = split(/;/,$prats); $CP{$k} = $v; } $set=$CP{'set'}; $all_mem=$CP{'all_mem'}; close(IN) or die "Can't close : $!"; 以下cdat2のopen -- [[マーレス]] &new{2008-05-24 (土) 15:33:47}; - あとは、混在させたいというか、きっちり分けるのが難しいのであれば、@pratsと@CPもcdat2用の配列名にするかですね。>>@pratsと@CPの部分が何をしているのかを把握すれば、そんなに難しいことではないと思います。>混在も分けるのも -- [[三毛]] &new{2008-05-24 (土) 16:03:09}; - 追加してやってみたのですが、データがリセットされてしまいます。 -- [[マーレス]] &new{2008-05-24 (土) 17:35:40}; - よくわかんないけど、なんとかできたかも・・・ 三毛さん丁寧にありがとうございました -- [[マーレス]] &new{2008-05-25 (日) 11:10:22}; #comment