• ベストアンサー

ファイルを1行削除する

ゲストブックに削除機能を付けたいのですが、やり方がわかりません。 入力された番号と一致する行を探し出して、削除キーと入力された番号が 同じだったら削除、としたいのですが、ファイルの一行を削除する方法がわかりません。 どのように行えば良いのでしょうか?

  • Perl
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

原始的ですが、以下の方針が考えられます。 ・ファイルの内容を一行ずつ読み込む  ・削除対象となる行かどうかのチェック   ・削除対象の行なら、次の行へ   ・削除対象でなければ、行の内容を変数に格納 ・全ての行をチェックし終えたら、変数に格納した  情報だけを元のファイルに上書きする。 これは、効率は悪いのですがとりあえず使えます。 ちなみに、Tempファイルを使う方式だと 「削除対象でなければ、行の内容を変数に格納」 しないで、ファイルに追記することになります。 (全部終わったら、Tempファイルと元のファイルを 置き換えて、Tempファイルを削除します)

Tsuboko
質問者

お礼

おおーなるほど('o'*) てっきりそのまま削除できるんだと思ってましたが、 まずそこから違うんですねー とても勉強になりました^^ どうもありがとうございます<(__)>

その他の回答 (1)

  • longname
  • ベストアンサー率28% (18/64)
回答No.2

おそらく読み出すときは1行づつ読み出して配列に入れていると思います。それを利用する場合はforeachなどで配列の要素一つ一つに対して処理を行います。 削除するときは、foreachで該当する番号と一致するかどうか要素をひとつひとつ比較し、一致しない場合だけ、その要素を別の配列にいれます(push,unshift等)。 そしてその新しい配列をファイルに書き出せば該当行の含まれないファイルができます。 ログファイルが大きくなると、処理速度等が問題になるので工夫が必要でしょうが、直感的に分かり易く、他の処理とからめて応用は利くと思います。 別の方法として、ファイルから1行づつ読み出したとき配列ではなく番号をキーにしたハッシュに入れておくと、該当する番号をキーにもつ要素をdeleteによって削除できます。foreachで回す部分が減ってよさそうです。 具体的にはフリースクリプトや参考書が勉強になります。

参考URL:
http://allabout.co.jp/career/cgiperl/
Tsuboko
質問者

お礼

ありがとうございます^^ とりあえず今は勉強段階なので、上の方法でやってみようと思います。 理解できるようになってきたら下の方法も試してみますね(^▽^)ノ

関連するQ&A

  • 秀丸で一行おきに行を削除する方法について

    秀丸で、一行おきに行を削除する方法について御教授ください。 今、手元に50万行のデータが入力されたテキストファイルがあるのですが、一行おきに行を削除したいと考えています。 たしか、正規表現を使えば出来たかと思うのですが、忘れてしまいました。 どなたか御教授いただけると幸いです。

  • 《エクセル2000》非表示になっている行を一括選択して削除したい

    表示・非表示行が混在しているシートが40強あります。 自分で作ったファイルではないので勝手がわからず、今は一行一行非表示行がないかを目で確認して、表示→削除という手順を踏んでいます。 例えば「表示行と非表示行を入れ替える」ような機能はありますか?

  • エクセルで行の削除

    セルA3からセルR5000までデータが入っています。 データー量を減らすため4行目、6行目と一行おきに削除したいのですが、一気に削除する方法はありませんか。 宜しくお願いします。

  • exsel 一行置きの行の削除 簡単な方法を教え頂けませか

    exsel 一行置きの行の削除 簡単な方法を教え頂けませか

  • ファイル内のデータを1行削除する方法

    いつもお世話になります。 今、ファイル操作を勉強しています。 sample.txtに下記のデータが格納されています。 【sample.txt】 --------------------- yamada.txt | 29 suzuki.txt | 25 kitamura.txt | 30 endo.txt | 32 --------------------- char *name="suzuki.txt"; sample.txtのデータがchar nameと一致する、 ファイルの行を削除し、行を詰めたいのですが どうしたらいいのでしょうか? 結果として、sample.txtが、 --------------------- yamada.txt | 29 kitamura.txt | 30 endo.txt | 32 --------------------- のように、一致したsuzuki.txtの行が削除され、 行が詰められている状態にしたいです。 どうぞよろしくお願い致します。

  • 行を削除しても自動的に連続した数値を表示させる方法

    A列に 1 2 3 4 5 ・・・と行番号を入力するに当たって 仮に3行目を削除してしまうと、1 2 4 5 ・・・と 数字が飛んでしまいます。 3行目を削除しても 1 2 3 4 5 ・・・と行番号が 自動的に書きかわる初歩的で簡単な方法があったと思うのですが、 思い出せません。 教えてください。よろしくお願いします。

  • 不要行を削除したい

    『B列のとあるセルに「あああ」と入力されているなら B1から「あああ」の一つ上の行まで削除する』というコードが知りたいです。 なので例えば 「あああ」がB100に入力されているとしたら 1行目から99行目まで削除して「あああ」を「B1」に持ってくるようにしたいです。 よろしくお願いします。

  • Excelで空白行を削除したい

    他の書類からExcelにコピペしたんですが、もとの書類の書式のせいか偶数行が全て空白行になっています。 実際に必要なデータは奇数行の各列に並んでいます。 見づらいので空白行(または偶数行でも同じ)を削除したいんです。 行数が500を超えるので、一行づつ行の削除をやっていると大変な手間です。 一発でやる方法はないでしょうか?

  • IDの下の間違いを削除したい

    このサイトにログインする時に、ID欄に間違った一文字を入れてしまいました。次から、最初の一文字を打つと、正しいIDの上に、その間違った行も出てしまい、うっとうしくて困っています。削除キーを押しても消えません。どうしたら間違って入力した一行を完全に削除できますか?

  • 合計が0の行を削除

    計算式が入力されており、合計が0(A,B列に数値が入力 されていない)の行を削除するVBAを教えてください。   A  B  C    1  10  5 15 2       0 3  20  6 26 C列に計算式が入力されています。 50行目まで入力されています。 オートフィルタを使用し、抽出された行を削除する方法が あると思いますが、VBAで作成する方法を探しています。 よろしくお願いします。

専門家に質問してみよう