ファイルの一部を置換する方法とは?

このQ&Aのポイント
  • FileReaderを使用して文章のテキストファイルから特定の部分を置換するための方法を知りたいです。
  • 文章内に改行が含まれる場合の置換方法を教えてください。
  • ファイルの内容を一度に読み込んで置換する方法では、文章のズレが生じてしまいます。他に効果的な方法はありますか?
回答を見る
  • ベストアンサー

改行を含む場合の置換。

内容が文章のテキストファイルがあります。 その中のある一部分を置換したいのですが、 例) おはようございます。→こんばんは。 FileReaderで一行づつ読み込んで、その中から「おはようございます。」を 探して「こんばんは。」に置換することはできたのですが、 文章なので途中で改行が入っている場合があります。 例) おはようご(↓改行)    ざいます。 こういう場合だと、探し出すことができません。 一度ファイルの内容を全部ひとつのStringに入れて 置換するという手も考えたんですが、 書き出すときに文章のズレが出てきてしまいます。 何かいい手はあるんでしょうか? わかりにくくてスイマセン。

  • era
  • お礼率38% (12/31)
  • Java
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
  • kawausok
  • ベストアンサー率46% (13/28)
回答No.1

ファイルを一つにStringに入れるやりかたが妥当だと考えますが、結局問題なのは置換後に改行をどう扱うかということでしょうか?? 例えば、eraさんの例の場合ですが、 例)おはようご(↓改行)   ざいます。 これはどういう風に置換されるイメージをお考えでしょうか?? (1) こんばんは。(↓改行) (2) こんばん(↓改行)   は。 (3) こんば(↓改行)   んは。 ...等々 置換後の改行の位置については様々なパターンが考えられます。どのようなパターンにするかを決めればおのずと処理ロジックも決まるものと考えます。

era
質問者

補足

解答ありがとうございます。 そうなんですよねぇ。 例えば置換したところを こんばんは。(↓改行) ってしても、その後の文章に影響(ズレ)が 出ちゃうし・・・。 それはやはり手直しするしかないですかね?

関連するQ&A

  • 改行を正規表現での置換のあとで元に戻す。

    あるテキストデータを一行ごとに読み込んで、chompで改行をはずして結合し、一つの長い行にしてから、正規表現で文章中の単語を(かなり多く)置換したとします。置換したあとのデータを、元データと同じ改行位置で改行をしたいのですが、なにか簡単な方法がありましたら教えて下さい。

    • ベストアンサー
    • Perl
  • 改行を含む置換

    改行を含んだ置換の仕方で、 始まりだよ ○○○○○○○○○○○○↓ 重要な内容1 ○○○○○○○○○○○○↓ ○○○○○○○○○○○○↓ ○○○○○○○○○○○○↓ 終りだよ ・・・ ・・・ 始まりだよ ○○○○○○○○○○○○↓ 重要な内容2↓ ○○○○○○○○○○○○↓ 終りだよ ・・・ 始まりだよ ○○○○○○○○○○○○↓ 重要な内容3 ○○○○○○○○○○○○↓ ○○○○○○○○○○○○↓ ○○○○○○○○○○○○↓ ○○○○○○○○○○○○↓ ○○○○○○○○○○○○↓ 終りだよ ・・・ このようなパターンがたくさんあります。 「始まりだよ」から「終りだよ」までの間の「重要な内容」だけを取り出し「重要な内容」だけに置換したいのですが 間の改行がバラバラなんです。しかもファイルがバラバラにある状況です。 エディタは秀丸を使用しています。 ツールでも他のエディタでも正規表現にもこだわりませんので 修正する方法を教えてください。 ほんと困ってます。宜しくお願いします。

  • 改行を含む置換について

    置換の仕方で、 始まりだよ ○○○○○○○○○○○○↓ 重要な内容1 ○○○○○○○○○○○○↓ ○○○○○○○○○○○○↓ ○○○○○○○○○○○○↓ 終りだよ ・・・ ・・・ 始まりだよ ○○○○○○○○○○○○↓ 重要な内容2↓ ○○○○○○○○○○○○↓ 終りだよ ・・・ 始まりだよ ○○○○○○○○○○○○↓ 重要な内容3 ○○○○○○○○○○○○↓ ○○○○○○○○○○○○↓ ○○○○○○○○○○○○↓ ○○○○○○○○○○○○↓ ○○○○○○○○○○○○↓ 終りだよ ・・・ このようなパターンがたくさんあります。 「始まりだよ」から「終りだよ」までの間の「重要な内容」だけを取り出し「重要な内容」だけに置換したいのですが 間の改行がバラバラなんです。しかもファイルがバラバラにある状況です。 エディタは秀丸を使用しています。 ツールでも他のエディタでも正規表現にもこだわりませんので 修正する方法を教えてください。 ほんと困ってます。宜しくお願いします。

  • sedでの改行置換

    sedを用いた処理で質問があります。 出力結果の改行を置換して一列として表示しようとしているのですが、どうもうまくいきません。 (perlは敢えて使いません) 例えば、以下のようなファイルがあるとして、 $ cat hoge.txt hoge boo bar この出力結果を加工して、「hoge boo bar」のように、 改行をスペースに置換して一行として表示したい場合は、どのようにすれば良いでしょうか? ちなみに、以下のような使い方だと、うまくいきませんでした。 $ cat hoge.txt | sed 's/\ > / /g' $ cat hoge.txt | sed 's/\n/ /' ■実行環境 OS : RedHat EL 1 sedのバージョン : sed-4.0.7-3 宜しくお願い致します。

  • 正規表現の置換で、カンマで区切られた語句を""と改行で分ける方法

    正規表現による置換についてお教えください。 Unixのコマンドで置換するときに、sed コマンドを使うと思います。 今、プログラムのソースコードの中に含まれている語句を取得するために、色々いじろうと思っています。 私が最もお聞きしたいのは、正規表現の書き方であることを、まずご理解ください。 ソースコードの中に、 string headline="語句1,語句2,・・・,語句n-1,語句n"; というように、 string headline= で始まっていて、 その後に " "(ダブルクォーテーションの組)で囲まれた部分が1箇所あり、 その部分に、カンマ(,)で区切られた語句がいくつもあるような行があったとき、 その " "の部分を、 "語句1", "語句2", ・・・ "語句n-1", "語句n" のように置換したいのです。 つまり、語句一つ一つをダブルクォーテーションで包んで、1行に語句が1つになるようにしたいのです。 厳密に言えば、stringとheadlineの間などに、タブや空白がいくつあるかわからないという問題なども考える必要があるかもしれません。 とりあえず私が考えたのは、 s/\(string headline="\)\([^,]\)+,\(";\)/\1\2",改行"\3/g です。 s/置換前の文字列のパターン/置換後の文字列のパターン/g となっています。 置換前のパターンで \( \) で囲まれている部分は、置換後のほうで、\1のように参照できます。 ■■でも、私の書いたものって、語句が繰り返し出現することに対応できていないように思われます。■■ 実際に、置換に改行を含めるには、正規表現をファイルの中に書いて、sedの-fオプションで読み込ませることになると思います。 string headline=" " という形をしていないものは、たとえ、" " の中がカンマで区切られていてもそれを分けません。

  • 改行

    改行 テキストファイルに書かれている文章にいくつパラグラフと行があるか調べたいのですが、 1行ずつ読み込んで、もし改行だけしか読み込まなかったらパラグラフカウンターを+1しようと思いプログラムを組んだのですが、 改行は"\n"でいいのでしょうか? テキストファイルの例 Laying Tile Requires Stick-to-itiveness. Today's topic for homeowners is: How to install a tile floor. Any home decorator will tell you that there is nothing quite like a tile floor for transforming an ordinary room into an orinary room that has tile on the floor. プログラム int line = 0; int paragraph = 1; String = temp; String fileName = "ファイルアドレス"; BufferedReader br = new BufferedReader(new FileReader(fileName)); while ((temp = br.readLine()) != null) { line++; if(temp.equals("\n")){ paragraph++; } } しかしこれだと、次のパラグラフに移ってもパラグラフカウンターが1のままになってしまいます。 テキストファイル中のパラグラフとパラグラフの間には改行がはさんであるので、1つのパラグラフの読み込みが終われば、次にtempには改行が読み込まれると思うのですが、 temp.equals("\n")ではダメなのでしょうか? 上のテキストファイルの例では、パラグラフ数は3、行数は7です。

    • ベストアンサー
    • Java
  • ワードの「置換」について

    WORD2003を使用しています。 ワードにURLのリストがあります。 一行に一つのURLアドレスです。 行の最後尾にカーソルをもってゆき、改行を押すと ハイパーリンクが張られます。 いちいち手でするのも面倒なので、一度にやりたいのですが。 「置換」で行の末尾に「改行」を挿入すればいいと思うのですが、やり方がわかりません。 どなたか教えてください。 よろしくお願いします。

  • 文字列の置換

    JAVAであるファイル内の文字列を置換するプログラム(日本語)を作りたいのですが、 ・ ・ String h_s; FileReader h_fr = new FileReader(in_filename); BufferedReader h_br = new BufferedReader(h_fr); while(true){  h_s = h_br.readLine();  if (h_s == null){   break;  }  ●文字列を置換するプログラム● } ・ ・ ここの●文字列を置換するプログラム●にあたる適当な関数って何かありますか? たとえばperlでいうと↓みたいなものなのですが・・・ s/置換前文字/置換後文字/g よろしくお願いします。

    • ベストアンサー
    • Java
  • VBScriptを用いた改行コードを含む置換方法について

    お世話になります。 VBScript初心者です。 下記の通り、VBスクリプトを用いてファイルの文末の「カンマカンマ改行」を 「改行」に置換したいと思っていますが、上手くできません。 VBScriptで正規表現を用い、改行コードを含んだ置換方法を教えていただきたく思います。 【置換前】 AA00001,プリン,AA00001,AA00000xxxx.xxx.xx.xx,,,○,, 【変更後】 AA00001,プリン,AA00001,AA00000xxxx.xxx.xx.xx,,,○ 現在のスクリプトは、 myStr1 = "AA00001,プリン,AA00001,AA00000xxxx.xxx.xx.xx,,,○,," '(1)RegExp オブジェクトを作成する Set objRE = New RegExp '(2)検索パターンを設定     objRE.Pattern = ",+\n"       '(3)大文字/小文字を区別しない objRE.IgnoreCase = True   '(4)全体を検索     objRE.Global = True     '(5)置換を実行 myStr2 = objRE.Replace(myStr1,"\n") '(6)一行書込み objFile.WriteLine(myStr2)      となっています。(部分的に抜粋しましたが各変数の定義はできています) (2)の検索パターンに",+\n"、(5)の置換を実行に"\n"を定義しましたが置換できませんでした。 他のパターンとして (2)の列に",+\x0A"、(5)の列に"\x0A" (2)の列に",+\x0d"、(5)の列に"\x0d" も行ってみましたが置換できませんでした。 なお、置換対象のファイルはtxtファイルまたはCSVファイルを考えています。 どなたかご教示いただきたく、よろしくお願い致します。

  • 秀丸エディタでの改行を含む複数行の置換について

    abc↓ 1行の文字列またはランダムな個数の改行を含むランダムな長さの英文文字列 def↓ を abc↓ あ↓ def↓ に置換したい場合、検索文字列はどのように指定すればいいのでしょうか? 「1行の文字列またはランダムな個数の改行を含むランダムな長さの英文文字列」は、 ee ff gg↓ の場合もあれば、 ee ff gg↓ hh iii jj↓ kk.↓ のような場合もありますが、これらすべてを全角1文字に置換したいのです。 また、この abc↓ 1行の文字列またはランダムな個数の改行を含むランダムな長さの英文文字列 def↓ は、他の文章の中に大量に埋まっていて、他の文章の体裁は崩せないため、 一括でとりあえずずべての改行を削除という方法は使えません。 お手数ですがどうぞよろしくお願い致します。