• ベストアンサー

Rubyのファイル上書き

rubyの初心者です。 ファイルの上書きをしたいのですが、File.open(filename,"a") ブロック を使うとファイルの一番下に文章が追加されてしまいます。 元のファイルの上にデータを追加したいと考えています。 今はファイルを配列にまとめて、データを加えて並び替えてとごちゃごちゃしたやり方になってしまっています。 なにかスマートな方法があればご教授ください。

  • Ruby
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

ファイルの先頭に追加する手段はありません。 一度全部読んで、追加したいデータと合わせて、元のファイルに上書きして下さい。 adddata = "追加したいデータ" olddata = open("ファイル名"){|f| f.read} open("ファイル名","w"){|f| f.print(adddata + olddata)}

関連するQ&A

  • perlです。配列ファイルをよみこんで、1つの要素を上書きする方法

    配列のファイルがあり、それをよみこんで、1つの要素だけ上書きして保存する方法を教えてください。 ex. file.datを以下のようなファイルだとして・・・ あいうえを かきくけこ さしすせそ たちつてと file.datが、 さしすせそ となるようにしたいのです。(つまり、三番目の要素を取り出し、上書き保存するというもの) 以下のように書いてみましたがうまく動きません。 open()やclose()は一回使うだけでいいように、読み書き両用で開いてみました。 $_にはファイル名が入っています。 open(FILE,"+<$_"); @temp=<FILE>; $temp2=$temp[2]; print FILE $temp2; close(LOGFILE); +<を+>とすると、ファイルが空(何も無くなる)となります。 まず読み専用で開いて、ファイルを閉じた後。上書き用で開いたほうがいいのでしょうか??

    • ベストアンサー
    • CGI
  • 上書きしてしまったファイルを元に戻せるでしょうか?

    エクセル2002を使用しています。ファイルを開いてデーターを打ち込んだのですが,名前を付けて保存したかったのに間違えて上書きしてしまいました。これを元に戻すか,呼び出すことができますか?教えてください。

  • AVIファイル上書き

    外付けハードディスクにあったaviファイル(サイズ2.6GB、3時間ほどのムービー)に誤って、約1分ほど上書きしてしまいました。 再生してみると上書きされたものだけが出てくるのですがファイル情報を見るとディスク上のサイズは上書きされる前の大きさと変わりがありません。 このファイルを元に戻す事は出来ますか? PC初心者です、質問内容が分かりにくくて申し訳ありません。

  • Rubyのファイルを実行できません(初心者)

    【環境】 デバイス:MacBookAir エディタ:CotEditor ***************** プログラミング初心者です。 MacにてRubyを独学で学ぼうと思い『たった2日でできるRuby』にある puts("Hello,Ruby.") という1行だけ書いたCotEditorで作成した hello.rb というファイルをターミナルで実行するステップで早くもつまづいております。 テキスト通り cd ruby と記述しても -bash: cd: ruby: No such file or directory とでてきてしまいます。 どなたかご教授お願いできますでしょうか? 画像なしですみません、何故か画像がアップできません。 ファイルサイズ全然余裕なんですけどもね・・・。

  • ATOK2010,文字が上書きされる

    最近、ATOK2010を使いはじめました。 Office 2010 Word の原稿用紙縦書きで文章作成中です。 保存した原稿用紙を呼び出し、追加の文章を書き始めましたが、文節間に挿入する語彙を追加しようとすると元の文章に上書きされ前に書いた文章が消えてしまいます。 通常通り、文章間に文字の追加挿入ができる方法をご教授ください。よろしくお願いいたします。

  • rubyで末尾から文字を検索する

    現在rubyでファイルパスからファイル名を取得したいと思っています。 具体的には"public/foror/filename"というstringがあったとして、このfilenameを取り出したいのです。 なので末尾から検索して最初に/が一致するまでの文字を取り出すという処理を書けばいいと考えて、下記のようなプログラムを書きましたが、うごきません。 p filepath[\/.*$] rubyも正規表現も初心者なので、色々と間違っているところがあるとおもいますが、なにかお気づきになった点がございました、ご指摘いただけると幸いです。

    • ベストアンサー
    • Ruby
  • 【PHP】csvファイルへの書き出し(1行追加or1行上書き)について

    【PHP】csvファイルへの書き出し(1行追加or1行上書き)について はじめて利用させていただきます。 現在、PHPにて書き出し処理を作成している者ですが、csvファイルへの書き出しの際に先頭行にスペースが大量に入ってしまい、困っています。 自分なりに調べてみたのですが、原因がわかりません。詳しい方からのアドバイスをお願いしたいです。 【行っている処理】 1.csvファイルを1行ずつ読み込み、配列に格納 2.既存のデータに同じ名前の人が存在する場合は、その行の配列の内容を変更(存在しない場合は配列の末尾に1件追加) 4.現在ファイルにあるデータを削除(丸めこみ)し、配列データを書き書き出し 【ソース】(書き出し処理に問題があると思ったため、それ以外の部分は割愛させていただきます) <?php $filename = 'data.csv'; $file = fopen($filename, "r+" ); $name = array(); if(flock($file,LOCK_SH)){ while( $data = fgetcsv( $file, 1000, "," ) ) {   //配列に格納 } //配列の内容変更or新規に一行追加処理 //現在のファイル内のデータを削除(まるめこみ) ftruncate($file, 0); //1行分のデータをカンマ区切りで結合し、書き出し for($i = 0; $i < $count; $i++){ $ins = $name[$i]; $ins .= ','; $ins .= $number[$i]; //書き込み失敗時のエラー if(fwrite($file, "$ins\n" ) === FALSE){ print("ファイル書き込みに失敗しました"); }else{ //処理なし } } //ファイルロック解除 flock($file, LOCK_UN); }else{ print("ファイルロックに失敗しました"); } 【csvファイルの中身(処理実行前)】 佐藤,1234 田中,12345 中村,9876 【csvファイルの中身(処理実行後)】                       佐藤,1234 田中,12345 中村,9876 以上です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • rubyでPDFファイルを読みたい

    PDFファイルを、rubyで読み込みたいのですが、 そのようなことを可能にする方法(ライブラリ)は、ありますでしょうか? つまり、 f = open "index.txt" f.each do |line|  puts line end この場合の「index.txt」が、テキストファイルでなく、 「index.pdf」というPDFファイルだった場合にも 同様の出力結果を期待したい、ということです。 (バイナリデータではなく、テキストデータを出力したい。) 実現手段をご存知の方がいましたら、何卒、教えて下さい。

  • 間違って上書きしました・・

    ワード文章を上書き編集していて、違うファイル名で保存したかったのに間違ってそのまま上書き保存してしまいました(涙)。 同じような質問はあると思うのですが、何せ急いでいるもので・・。 もし元のファイルを復活させる方法があるなら教えてください。 よろしくお願いします! あ、ハードでなくフロッピーにあるファイルです。

  • 間違って必要ファイルに上書きをしてしまいました。

    ご質問です。助けてください。 アクセスベースの会計ソフトを使っていて、 間違って必要ファイルに上書きをしてしまいました。 3か月分のデータが水の泡です・・・ うっかりしていたことに、バックアップもとっていませんでした。 どこかに上書き前のデータは残っていないのでしょうか。些細なことでもかまいませんので、ご教授いただければ幸いです。 OSは、Windows98で、Access2000を使っています。 よろしくお願いいたします。

専門家に質問してみよう