• ベストアンサー

C言語

毎度お世話になっております。 C言語の勉強を最近始めたのですが、ファイル処理で どうしても出来ない事があり質問させてもらいました。 処理内容は 「特定のファイルの指定した行だけを削除する」です。 fopenしたファイルをscanfによって削除したい行を指定して ファイルの編集をしようと思っているのですが、どうもできません。 初歩的な処理かと思いますがどうか教えてください。

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

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

ファイルは原稿用紙みたいなものです ファイルの書き込みは原稿用紙のますに隙間無く書いていくようなものです ファイル操作で出来るのは 最後に付け足すこと 途中の文字を消して同じ文字数で上書きすること 最後を消してファイルを短くすること くらいで途中の挿入や削除といった操作はできません パソコン上で出来るように見えるのは新たに全部書き直しているだけです

その他の回答 (3)

回答No.4

No.1追記 とりあえず、「一つのファイル」ですべてやろうとはせずに、 「元のファイル」(読むだけ)と「削除した後のな内容を出力するファイル」とに分けて ファイルアクセスについて理解してから考えた方がいいと思う。

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

その、どうもうまくいかないというソースを載せてみてください。

回答No.1

こちらの認識が間違っていなければ >fopenしたファイルをscanfによって削除したい行を指定して >ファイルの編集をしようと思っているのですが、どうもできません。 では(数十文字程度ならともかく、大きなデータでは)できないと思う。 削除したい部分の先頭から、削除後に詰める部分を読み上書きするようにしていく処理が必要。 例えば、二行目を削除する場合、二行目の開始位置から三行目を読んで上書きしていかなければいけない。 小さいデータで、メモリに余裕があるのなら全部を読み込んだあと必要な部分を書き出すという方法もありますが。

関連するQ&A

  • C言語のfopenについて教えてください。

    C言語のfopenについて教えてください。 ある1つのファイルをr(テキストファイル読み込みモード)でfopenしたとします。 そのファイルをfcloseする前に、同じファイルが再度rモードでfopenされても問題ないのでしょうか? 何を気にしているかと言いますと、あるプログラムであるファイルをrモードでfopenして読み込む処理があるのですが、そのプログラムを呼び出す処理が複数あります。 確率は低いと言えど、もし同時にその処理が実行された場合、rモードでfopenしているファイルにfclose前に再度rモードのfopenがされたらエラーとなってしまうのでしょうか? もし、エラーとなる場合、回避する方法がありますか? また、エラーとならない場合は、fcloseするまで次の処理が待ってしまうのでしょうか? 読み込みモードだから問題ないのかなとも思ったのですが、どなたかご存知だったら教えてください。 よろしくお願いしますm(_ _)m

  • C言語

    C言語で簡単なプログラムを作っているのですが、 「テキストファイルが存在し、かつ空のテキストファイル(開いても何も書かれていない)だと、そのテキストファイルを削除する」 というコードはどうのように書けばいいのでしょうか? 現在自分が考えているのは、 #include<stdio.h> int main(){ FILE *fp; if((fp=fopen("example.txt","r"))==NULL){ printf("file not open\n"); }else if(((fp=fopen("example.txt","r"))!=NULL)&&(fgetc(fp)==NULL)){ //「ファイルがあって、中に何も書かれていない」という条件式を書きたい// remove("example.txt"); } return 0; } 大学で講義としてC言語を習っている程度の知識です。 fopenのif文の書き方があってるかどうかもわからないんですが^^; borland c++ 5.5.1を使用しています。 よろしくお願いします。

  • C言語でのファイルのデータ更新について

    C言語初級者です。 1行単位でデータが書いてあるファイルで、指定した行のデータを書き換えるようなプログラムはどのように記述すればよいのでしょうか。 必要な関数、処理の仕方など教授していただければと思います。 処理系はCygwinを使っています。 ファイルには五千行程度のデータが書いてあります。

  • [c言語] fopenでの追記

    c言語についてです。 すでにあるテキストファイルに追記したい場合、ファイルの一番下の行から追記されてしまうのですが、 最初から追記ができるようにするにはどうすればいいのですか。 ※ FILE *fin=fopen=("hoge.log","a"); や FILE *fin=fopen=("hoge.log","a+"); で開いてます。 ( rewind(fin)は無理でした。 ) よろしくお願い致します。

  • fopen【C言語】

    C言語でファイルをオープンするときに デスクトップにあるkanjdata.txtというファイルを指定したいのですが \ や : 等色々試してみたのですがどうしてもファイルが開けません、どの様に指定すればデスクトップにあるファイルをオープンできるのでしょうか?? kanjdata.txtのある場所は C:\Documents and Settings\ユーザ\デスクトップ です、よろしくお願いいたします. 今作っているもの if( (fp = fopen("kanjdata.txt","rt") ) ==NULL ) { printf("ファイルが開けません\n") ; exit(0) ; }

  • C言語でフルパスのファイル読み込み方法について

    VBAからC言語の勉強を始めたのですが、 c:\test\myfile.txt というファイルを読み込むとき FILE *fp; fp = fopen("c:\\test\\myfile.txt", "r"); というようにアドレスバーからパスをコピーして貼り付けた後、\を\\に置換しなければなりません。 そのままパス情報を使えていたVBAのプログラムよりかなりわずらわしく感じるのですが、C言語ではファイルの読み込みでフルパスを指定して読み込むのは一般的ではないのでしょうか。 それともほかにやり方(\のままパスを設定する方法)があるのでしょうか。 なんだか使い勝手が違ってちょっと戸惑っているのですが、よろしくお願いします。

  • C言語のテキストファイルの読込み

    必要に迫られてC言語でテキストファイルの読込みを行う プログラムを作成しなければならなくなりました。 whileとfscanfを用いて書式を指定して一行ずつ読込むことができる ということは知っていますが、その際、たとえば読み込むファイルが 20行のテキストファイルだったとして、10行目から読込みを 行いたい場合はどのようにプログラムを書けばいいのでしょうか? なにぶんC言語初心者ですのでよろしくお願いします。

  • C言語について

    パソコン系の就職に就きたく、C言語について勉強したいと思い、 本を買い勉強することにしました。 しかし、最初の初歩でつまずいてしまいました。 プログラムがコンパイル出来ないのです… ソースファイルを保存したディレクトリに移動してとかいてあるのですが何を移動するのでしょうか? コマンドプロントを使えません。 助けてください…

  • C言語

    今、独学でC言語を勉強しているんですが。 大きく、 条件処理、繰り返し処理、配列、関数、2次元配列、文字列、構造体、ファイル処理、乱数、検索、バブル・ソート、ポインタ まではやったんですが(参考書で勉強)。 その次になにを勉強したらよく分からないので、 何を勉強するべきか教えてください。 将来的にこれっと言った作りたいものは決めていません。 お願いします。

  • C言語の初歩的な質問です。

    C言語の初歩的な質問です。 fopenでtextファイルを複数開きたいんですけど どのようにすればよいかわかりません。 感覚的には for(i=1;i<11;i++){ FILE*fpi; fpi=fopen("i.txt","r"); while((fscanf(fpi,"%s",&score[i]))!=EOF) { }; のようにしたいんです。 もし無理ならばほかに何か方法はありませんか? わかりにくい質問ですいませんが どなたか教えてください。

専門家に質問してみよう