• ベストアンサー

Rubyで外部ファイル内の文字列を削除したい

RubyでTeXファイルを出力しようとしているのですが、 追加書き込みをする際に、End Of File の前の一番最後の文字列 である「\end{document}」が邪魔なので削除したいのですが、どうしても 案が見つかりません。 なにか良い方法をご存知の方はぜひご教授ください。おねがいします。

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

よっぽどでかいファイルが対象で、ディスクも余裕がないとかいう制限がないのなら、 ARGV.each do |file| data = "" lastline = "" open(file, 'r') do |f| data = f.readlines lastline = data.pop end File.rename file, file + ".bak" open(file, "w") do |f| f.write data f.puts "この行を追加" #f.write lastline # 元の最終行を復活するのならこれも実行 end end こんな感じに 1. ファイルを配列に読み込み 2. 最終行を削除し 3.ファイルを書き込み用にオープンしなおして 4. 最終行を削除したデータと追加データを書き出す ってな具合でいいのでは? エラー処理とかはしていないのでその辺はよしなに。

glanzen
質問者

お礼

どうもありがとうございます。 調べながら、試してみたら上手くいきました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • asdf24
  • ベストアンサー率54% (27/50)
回答No.2

追記したいファイルを r+ で開いて 邪魔な文字列の手前まで seek でファイルポインタを戻すというのは?

glanzen
質問者

お礼

回答を元に調べてみました。 上手くいきそうな手が見つかったので試してみます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

ファイル操作の削除の基本は 書き出しの時にそこを飛ばす事 じゃないのかな

glanzen
質問者

お礼

早い回答ありがとうございました。 お礼が遅くなってしまい申し訳ございません。 ファイルの入出力は今まで勉強したことがなかったので、 困っていましたが、参考にして調べてみたいと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Ruby1.9での文字列操作について。

    Ruby1.9での文字列操作について。 今までRuby1.8を使用していましたが、Ruby1.9に変えてから、次の4種類の問題が出てきました。 (※Ruby1.9に変えてから、#encoding: shift_jisを定義しております) どれか1種類でも結構ですので、Ruby1.9での対策、代替の処理について教えてください。 <問題1> ■文字列を指定のバイト位置まで削除する □現在(Ruby1.8)のコード moji = "1あアあアイ234565789" moji[4,14] = "" →1.8では、"1あア"となりますが、1.9では、"1あアあ"となります。 <問題2> ■文字列の中から指定文字が見つかったバイト位置の算出 □現在(Ruby1.8)のコード n = "あいうえお".index("う") →1.8では、n=4となりますが、1.9では、n=2となります。 <問題3> ■指定した年月日の存在チェック □現在(Ruby1.8)のコード y = 1900 m = 3 d = 10 if Date.exist?(y,m,d) p "test# end →1.8では、trueとなりますが、1.9では実行時にNoMethoodErrorとなります。 <問題4> ■半角英数字→全角英数字変換 □現在(Ruby1.8)のコード sss = moji.tr('a-zA-Z0-9', 'a-zA-Z0-9') →1.9では実行時にエラーメッセージが出力されます(略) 色々と書きましたが、どうかお助けください。

    • ベストアンサー
    • Ruby
  • バッチファイルで文字列削除について

    バッチファイルで文字列削除について 以下の出力結果のファイルの中身です a.txt "DisplayName"="xxxxxxxxxxxxxx" "DisplayName"="と最後の"の部分を削除したいのですが Googleで色々調べたのですが、わかりません。 勉強不足で申し訳ありませんが、教えて頂けたら幸いです。 よろしくお願いします。

  • rubyで文字列のreplaceの方法について

    rubyで文字列のreplaceの方法について いつもお世話になっております。 rubyで分からないことがあります。 ご存知の方がおられましたら、ご教授お願い致します。 【質問】 以下の文字列があるとします。 (文字列) <!-- Advertiser 'XXX', Include user in segment 'test--001' - DO NOT---ANY WAY --> <img src="XXXXXX" alt="test--001" width="1" height="1" /> <!-- End of segment tag --> 文字列の<!-- -->で囲まれた中でハイフンがある場合、ハイフンを-に変更したいです。 (但し、<!--と-->のハイフンは除きます) どのように記述すれば変更出来るのでしょうか? 上記(文字列)ですと <!-- Advertiser 'XXX', Include user in segment 'test--001' - DO NOT---ANY WAY --> <img src="XXXXXX" alt="test--001" width="1" height="1" /> <!-- End of segment tag --> に変更したいです。 以上です。 よろしくお願い致します。

    • ベストアンサー
    • Ruby
  • [Ruby]外部ファイルの全角文字削除ができない原因を教えてください

    Rubyでの全角文字削除について質問です。 (環境:Windows XP,cygwin) コマンドライン引数で指定した外部ファイルを読み込んで全角文字を削除しようとすると、 全角文字が削除できないのですが、この原因がわかる方がいらしゃいましたら教えてください。 ・外部ファイル(Shift_JIS,改行=CR+LF) "7桁の| 郵便番号を| 入力して|,ください" ・Rubyスクリプト(cygwin上のため、EUC-JP,改行LF) #file.each_line do |line| # line.gsub!(/ /,'') # line.gsub!(/,/,'') # line.gsub!(/|/,'') #end 全角スペース、全角カンマ、全角パイプラインすべて削除できません。 半角文字は上記方法で削除できます。 しかし、スクリプト中に以下のような記述をすると、 #text = "7桁の 郵便番号を 入力して,ください" #print text.gsub(/ |,/,'') 「7桁の郵便番号を入力してください」と全角文字が削除されて表示されます。 教えてください。 よろしくお願いします。

  • 【Ruby or Perl・正規表現】ある文字列の先頭5文字を残して削除するには?

    初心者質問で恐縮です。 RubyもしくはPerlで、ある文字列の先頭5文字を除く文字をすべて削除する(先頭5文字のみの文字列にする)には、どのような記述をすればよいでしょうか。 教えていただけるとうれしいです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • Ruby 1.9.3でShift-JIS文字列を

    よろしくお願いします。 Rubyでスマフォ(SH-02D)の電話帳のQUOTED-PRINTABLEの文字列を WindowsのShift-JIS文字列に変換してファイルに出力したいのですが putsだと日本語文字列に見えるのですが、printだと[]で囲まれた16進数の (一部は^のように表示されますが)列になってしまいます。 ネットで検索してもprintはそのまま、putsは強制改行があるという 違いしかないように思えるのですがどうすればputsと同じ出力を 強制改行無しに出力できるのでしょうか。 RubyはWindows 7 Professional x64でeclipse INDIGOにAptana Studioを 入れて入力&実行しています。 (プレアデスも入ってます。ソースのエンコードはS-JISです。) sub_column = column[i].split("/;/") quoted_string = sub_column[j].unpack("M") puts quoted_string print quoted_string ---- (抜粋) でputsとprintで見え方が違うのです。

  • TeXで11列以上の行列を入力する

    TeXで、 \documentclass{jsarticle} \usepackage{amsmath} \begin{document} \begin{equation} \begin{bmatrix} 1&1&1&1&1&1&0&0&0&0&0 \end{bmatrix} \end{equation} \end{document} のように、11列ある行列を書こうとするとエラーが出ます。 10列までなら書けるのですが・・・。 l.6 1&1&1&1&1&1&0&0&0&0& 0\\ No pages of output 上のような表示が出ます。 どうすれば11列以上書けるのでしょうか?? 分かる方、どうぞよろしくお願いします。

  • sed で \ を含む文字列に置換

    現在、非常に多数のドキュメントの整形を LaTeXを使って自動的に行っています。 問題となっている処理のエッセンスを抜き出すと次のようなもので、テンプレートファイル中の __PATTERN__ という文字列を、その都度指定する文字列($string)に置換した後にplatexでコンパイルする、という流れです。 ---------- #!/bin/bash sed "s/__PATTERN__/$string/" < template.tex > document.tex platex document.tex ---------- 問題は、$string に '_'(アンダーバー)が含まれるケースで、platexのコンパイルでエラーが発生します。 これを回避するには、'_' を '\_' に置換する必要がありますが、上記処理の前に、$string 中の '_' を '\_' に置換する処理を加えても、上記処理の段階で '\' が消えてしまいます。 肝は sed でのエスケープのやり方だと思うのですが、どうにもうまく行きませんので、お知恵を拝借できればと思います。 なお、tex ファイル中、__PATTERN__ は、他のコマンドの引数内で使用されているため、\verb+ + で囲むという手段も使えません。

  • ファイルの途中に文字列を挿入

    こんにちは。プログラミング初心者で、初めて質問させていただきます。勉強中に思ったのですが、 ファイルの書き込みについてなのですが、あるファイルに既にデータがあり、その先頭部分(あるいは途中)にある文字列を追加挿入しなければならなくなった場合どういった処理をすることになるのでしょうが? fseekなどで場所を指定して書き込んでしまうと、そこの文字列が上書きされてしまうと思うのですが。

  • 文字列(任意のURL)から、最後のファイルを削除し

    変数に、下記のような文字列(任意のURL)が格納されているとき、 http://www8.ghk.or.jp/nrws/hgml/20120924/k15515034581000.html 以下の文字列を取り出すにはどうすればよいでしょうか? http://www8.ghk.or.jp/nrws/hgml/20120924/ 欲しいのは、最後のファイルを削除した部分です。 (右から数えて、最初の/より右を削除)した文字列を取得したいです

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • 近所の頭のおかしい高齢者が無意味な通報を繰り返して困っています。
  • 認知症の高齢者は被害妄想が強く、周囲に人がいただけでも通報してしまいます。
  • この問題は高齢者施設での生活によるものであり、その対策を考える必要があります。
回答を見る