掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.29160

文字列(もしくは行)の書き換え
投稿者---feena(2006/12/06 11:02:32)


初心者的(そもそも初歩的なCを理解していない)な質問で申し訳ないのですが、

テキストファイルを読み込んで、ある行の文字列を違う文字列に置き換えて、ファイルに書き込むことは可能でしょうか?

例えば、
「名称 材質 寸法 工具 スロット 耕具系補正」
を下記のように変える場合
「名称 材質 寸法 工具 スロット 工具径補正」
しかも、この文字は20行目に存在していた場合。

なので、私はその行を削除して、削除した行に新たに追加するような方法でも良いと思いました。
キーワード検索すると「delete」とか「remove」とか出てきますが、
何行目を削除するとか、何行目に追加するとかになるとさすがに引っかからないですね。

よろしければ教えてください。



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:文字列(もしくは行)の書き換え 29161 nop 2006/12/06 11:10:55
<子記事> Re:文字列(もしくは行)の書き換え 29165 たかぎ 2006/12/06 12:07:48


No.29161

Re:文字列(もしくは行)の書き換え
投稿者---nop(2006/12/06 11:10:55)


変更前と変更後の文字列が、
同じバイト数であればそのまま上書きしてもよいが、
今回の様に違う場合、一度メモリ上に読み出し、
メモリ内で内容を編集し、全体を出力し直す、
と言う方法が判りやすいかと。



この投稿にコメントする

削除パスワード

No.29165

Re:文字列(もしくは行)の書き換え
投稿者---たかぎ(2006/12/06 12:07:48)
http://takagi.in/


ファイルの内容を直接編集するのはいろいろ問題も多いので、いったん別のファイルに編集後の内容を出力して、出力が完了してからrenameで目的のファイル名を作る方がよいと思います。



この投稿にコメントする

削除パスワード

No.29167

Re:文字列(もしくは行)の書き換え
投稿者---feena(2006/12/06 13:34:53)


書き込んでいただいてありがとうございます。

>いったん別のファイルに編集後の内容を出力して、出力が完了してからrenameで目的のファイル名を作る方がよいと思います。

用意した別ファイルに置き換えるって事ですよね?
内容が全部変わるために、その方法では無理そうです。
テキストファイルの、一部分だけ変更して、他の部分はそのままという方法を望んでおります。(そのファイルは、変更したい一部分だけ共通で、他は内容が環境によって変わるため、予め用意するのは難しい。)

>メモリ内で編集
すみません。初心者なものでよく分からないのですが、fopen等を用いて読み込んで、編集するという事ではないようですね・・・。






この投稿にコメントする

削除パスワード

No.29168

Re:文字列(もしくは行)の書き換え
投稿者---YuO(2006/12/06 13:47:32)


>>いったん別のファイルに編集後の内容を出力して、出力が完了してからrenameで目的のファイル名を作る方がよいと思います。
>用意した別ファイルに置き換えるって事ですよね?

そうではなく,その場で別のファイルに書き出して,そのファイルを元のファイルにすげ替える,ということだと思います。

fgets等を使って1行ずつ読み込み,別のファイルに出力するようにします。その時に,
・該当行以外はそのまま出力
・該当行は置き換えたものを出力
を繰り返せば,該当行が置き換わった新しいファイルができあがります。
あとは,元のファイルを削除して新しく作ったファイルの名前を元のファイル名にしてやれば,元のファイルを編集したかのような結果が得られます。



この投稿にコメントする

削除パスワード

No.29169

Re:文字列(もしくは行)の書き換え
投稿者---feena(2006/12/06 15:14:28)


>そうではなく,その場で別のファイルに書き出して,そのファイルを元のファイルにすげ替える,ということだと思います。
>
>fgets等を使って1行ずつ読み込み,別のファイルに出力するようにします。その時に,
>・該当行以外はそのまま出力
>・該当行は置き換えたものを出力
>を繰り返せば,該当行が置き換わった新しいファイルができあがります。
>あとは,元のファイルを削除して新しく作ったファイルの名前を元のファイル名にしてやれば,元のファイルを編集したかのような結果が得られます。
ありがとうございます。
頭の中でフローチャートはできました。(実際に作れるかどうかは別として・・・)
やってみます。



この投稿にコメントする

削除パスワード

No.29175

Re:文字列(もしくは行)の書き換え
投稿者---たかぎ(2006/12/06 18:35:19)
http://takagi.in/


エラー発生時のダメージを最小限に食い止めるには、

>あとは,元のファイルを削除して新しく作ったファイルの名前を元のファイル名にしてやれば,元のファイルを編集したかのような結果が得られます。

1. 元のファイルを別の名前に変更する。
2. 新しく作ったファイルを元のファイル名に変更する。
3. ここまででエラーが発生していなければ、別の名前になった元のファイルを削除する。
4. そうでなければ、別の名前になった元のファイルの名前を元に戻す。

とするとよいでしょう。
仮に4.が実行できなくても、別のファイル名で元のファイルが残っているので、容易に復元することができます。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧