![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
たびたびお世話になります。
データには、「データNO」「登録NO」「名前」「カテゴリー」「金額」が登録されています。
もともとあったデータをフォームで編集、送信してデータNO($d_no)と一致した行だけを書替え(上書き)したいんですが、どうしても方法がわかりません。
open(IN,"../save_data/sdeta.txt");
@data = <IN>;
close(IN);
foreach(@data){
chop($sdata);
($d_no,$s_no,$s_name,$d_class,$s_price) = split (/=/, $sdata);
if( $value eq $d_no){
$sdata="$in{'d_no'}=$in{'s_no'}=$in{'s_name'}=$in{'d_class'}=$in{'s_price'}\n";
}else{
$sdata="$d_no=$s_no=$s_name=$d_class=$s_price\n"
}
}
open(OUT,">../save_data/sdeta.txt") || &error("オープンエラー");
print OUT @data;
close(OUT);
上のプログラムを書いても、書替えできませんでした。
どのように直せば一行のみの書替えが出来るんでしょうか。
よろしくお願い致します。
No.3ベストアンサー
- 回答日時:
まず、お約束として、スクリプトの最初の方に
use strict ;
use warnings ;
を書きましょう。こうすると、宣言してない変数とか、未定義値を文字や数値として利用したりするなど、通常はそのまま使えることが、エラーにや警告になります。
で、おそらく、$sdataについてエラーまたは警告が出るはずです。提示された範囲で$sdataに値が設定されているのは
> $sdata="$in{'d_no'}=$in{'s_no'}=$in{'s_name'}=$in{'d_class'}=$in{'s_price'}\n";
> $sdata="$d_no=$s_no=$s_name=$d_class=$s_price\n"
この2行だけです。
> ($d_no,$s_no,$s_name,$d_class,$s_price) = split (/=/, $sdata);
では、最初の$sdataは無いので前の変数は全部空だし、2回目以降は先の2行のどちらかの内容が繰り返されるだけです。
初心者とのことですが、それならなおさら基礎を勉強してください。
ネットのサンプルコードを参考にするにも、どこが必要か見極められなければ意味がありません。
回答ありがとうございました。
use strict ;
use warnings ;
をスプリクトの最初の方につけたら、言われたとおりエラーが出ました。
今回質問した箇所を削除して転送してもエラーが出たので、
他にも色々な箇所が間違っていたようです・・・。
kmeeさんの言われたように、もう一度基礎から勉強してみようと思います。
どうもありがとうございました。
No.2
- 回答日時:
「$sdataは「$d_no,$s_no,$s_name,$d_class,$s_price」をまとめたものかな、と思っていたんですが。
」というのは, どうしてそう思われたのでしょうか? 少なくとも, このスクリプト中で $sdata に値を設定する前に chop とか split とかしてますよね.foreach のデフォルトの変数はなんでしょうか?
No.1
- 回答日時:
そりゃそうでしょう. $sdata ってなに?
この回答への補足
この$sdataがそもそも必要ないんでしょうか?
$sdataは「$d_no,$s_no,$s_name,$d_class,$s_price」をまとめたものかな、と思っていたんですが。
色々なサイトを参照しながら作成しているんですが、
perl初心者なので、全てが理解しているわけではありません。
すみません。
どのように直したら、変更していない行はそのままで、
一行だけ上書き保存が出来るんでしょうか。
少しいじると編集した1行だけ残して、あとのデータは全て消えてしまったりします。
よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Pythonで会員サイトの自動ログイン ID Nameがない 1 2022/12/16 02:09
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- 英語 No other student in this class is as pretty as Sat 1 2022/11/15 21:57
- その他(プログラミング・Web制作) ColabでのPytorchのエラー 1 2022/11/19 20:51
- その他(SNS・コミュニケーションサービス) 自分のpcがハッキングされたようなメールが来たのですがどうすればいいですか? 4 2022/10/02 16:14
- Excel(エクセル) vba シート名の一覧を2列に分けるには 5 2023/04/24 08:56
- 英語 【 論・表 英訳 】 問題 次の文を英訳せよ。 クラスの誰もその質問に答えられませんでした。 解答 4 2022/07/25 21:43
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- 英語 提示文の"a period of"の必要性とその効果について 2 2022/12/30 13:13
- 英語 However, in 57.1% of the cases there were apical s 2 2022/05/16 20:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ポインター引数の関数でコンパ...
-
オセロゲーム 2次元配列で困...
-
【Excel VBA】10進数を2進数に...
-
HKEY_CLASSES_ROOT\\.avi
-
マクロ登録したピボットが重い...
-
printfの%eで指数部分の桁数を...
-
'dataType' 引数を Null にする...
-
int型(2バイト)データの分割
-
ラズパイ3と音声認識Juliusを...
-
perlでテキストデータの指定行...
-
CreateProcessでの環境変数の設...
-
エクセルVBA:日付データの変換...
-
Excel VBA メール作成について ...
-
char str[256]の256の意味は?
-
エクセルシート名の制限を変更...
-
UTF-8で5~6バイトになる文字コ...
-
Excel 1セル当りの文字数が2...
-
メールフォームで改行スペース...
-
バイナリとBCDコード
-
ワイド文字のバイト数が取得で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ポインター引数の関数でコンパ...
-
stable diffusionのエラー
-
printfの%eで指数部分の桁数を...
-
エクセルVBA:日付データの変換...
-
linuxのシェルでファイル名に先...
-
int型(2バイト)データの分割
-
【Excel VBA】10進数を2進数に...
-
C#でのswitch文
-
データの値の近いものをグルー...
-
C言語 ファイル内のデータと入...
-
10個の実数に対する降順ソート...
-
C言語の構造体にてバブルソート...
-
'dataType' 引数を Null にする...
-
matlabのソースコードをpython...
-
C言語の勉強しています。すみま...
-
c言語での wavファイルの編集(...
-
テキストファイルの結合について
-
C言語についてです! 同じ年の...
-
sort関数でひらがなとカタカナ...
-
matlabでのRRI検出
おすすめ情報