- ベストアンサー
ファイルデータの入れ替えについての質問
- ファイルデータの入れ替えについての質問です。POSTメソッドで送られてきたデータ$get_yearと$get_monthが、ファイルの中のデータと一致する場合はその行を入れ替え、一致しない場合は追加して書き込む処理を行いたいです。
- ファイルデータの入れ替えについての質問です。処理の流れとしては、POSTメソッドで送られてきたデータ$get_yearと$get_monthが、ファイルの中のデータと一致する場合はその行を入れ替え、一致しない場合は追加して書き込むという処理を行いたいです。
- ファイルデータの入れ替えについての質問です。ファイルの内容は$s_get_year<>$s_get_month<>@chk<>という形式で並んでおり、POSTメソッドで送られてきたデータ$get_yearと$get_monthが一致する行を入れ替えたり、追加したりしたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ん~今回の質問に関係あるところだけ... split関数は3つの引数を与えることができます split /pattern/, expr, limit expr という文字列を /pattern/という正規表現にマッチするデリミタで分割し 分割された部分文字列をリストとして返します limitが与えられた場合は最大 limit個の文字列に分割します(注 limit>0の場合です) #sample 1. $var = "One:Two:Three"; @list = split( /:/ , $var ); これは $var という変数の内容を /:/ にマッチする文字(この場合は:のみ)で分割し,分割された部分文字列のリストを返します $varの内容は変化しません。 順を追ってみていきますと Oneの直後の:で「One」 「Two:Three」 (2つの文字列に分割) Twoの直後の:で「One」 「Two」 「Three」 (3つの文字列に分割) もう:がないので分割は完了です 結局('One','Two','Three')というリストを返します #sample 2. $var = "One:Two:Three"; @list = split( /:/ , $var, 2); limitとして2が与えられた場合,$varの値を:で分割していくのは上と同じなのですが,2つの部分文字列に分けることができた時点で分割をやめちゃいます 順を追っていきますと Oneの直後の:で「One」 「Two:Three」 (2つの文字列に分割) ここで分割はストップ 戻り値としては('One','Two:Three')となります あと今回の質問とは関係ないかもしれませんが limitを与える場合と与えない場合の違いとして.. @a = split(/:/, "One:::",4); # 結果 @a = ('One', '', '', ''); @a = split(/:/, "One:::"); # 結果 @a = ('One'); (limitを与えないとリストの最後の空の要素は切り捨て)
その他の回答 (2)
- moon_piyo
- ベストアンサー率60% (88/146)
($s_get_year,$s_get_month) = split /<>/, $_, 2; ↓ ($s_get_year,$s_get_month) = split /<>/, $_, 3;
補足
moon_piyoさんありがとうございますいつも世話になっております 動作確認出来ましたが、この場をお借りしてsplit関数の使い方を教えて頂けませんでしょうかたとえば $var = "One:Two:Three"; @list = split( /:/ , $var ); @listは$varという文字列の中の:を,に置き換えるという書き方は理解できるのですが ($s_get_year,$s_get_month) = split /<>/, $_, 3; このスクリプトですと<>を$_に置き換える即ち<>を消してしまう動作という理解の仕方で宜しいのでしょうか?またその後の3という数字の意味が理解出来ないのですが すみませんが宜しく御教授お願いいたします。
- osamuy
- ベストアンサー率42% (1231/2878)
何がどう「思い通り」じゃないのかを補足した方が、回答が付きやすいと思います。 追加が上手くできないというのだったら、ifが一度も成立しない場合のロジックが抜けているせいかと。
補足
すみません、説明の不足のようでした。
お礼
お世話になります、分かりやすく詳しい解説ありがとうございます 大変良く理解できました。