いつもお世話になっております。
ファイル操作についてご教授ください。
sample.txtに下記のデータが格納されています。
【sample.txt】
-------------------
りんご 100円
バナナ 120円
苺 150円
-------------------
この状態で、scanfで「バナナ」と入力し、
sample.txtからバナナの行を削除し、
行を詰めるようにしたいのですが、
どのようにしたらいいのでしょうか。
【流れ】
"文字を入力してください"のメッセージ。
↓
「バナナ」と入力。
↓
-------------------
りんご 100円
苺 150円
-------------------
上記のように、scanfで入力した「バナナ」の行が削除され、
行が詰められている上状態にしたいです。
超が付くほどの初心者なので、
ソースも書いていただけると幸いです。
どうぞ宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
下のソースコードをコンパイルして実行すると、sample.txt を読み込んで、output.txt に結果を書き出します。
いかに短いコードで作るか試してみました。------------ ここから ------------
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
static char buf[BUFSIZ], str[BUFSIZ];
static void input(char *c) {
printf("文字を入力してください\n");
scanf("%s", buf);
sprintf(str, "%s %s < sample.txt > output.txt", c, buf);
system(str);
}
static void output(char *s, int l) {
while (gets(buf)) if (strncmp(buf, s, l)) puts(buf);
}
int main(int ac, char *av[]) {
if (ac == 1) input(av[0]); else output(av[1], strlen(av[1]));
return 1;
}
------------ ここまで ------------
ulisrtさん、
ご回答ありがとうございます。
ソースコードも記載していただき、
本当に助かります。
さっそく試させていただきます。
ありがとうございました。
No.4
- 回答日時:
>ulisrtさんの教えていただいたコードに、
>ファイルを削除する内容のコード付け加えようとしているのですが、
>なかなか上手くいきません。
元のプログラムがどういう流れになってるのか理解できてます?
まずはそこから始めた方がいいと思いますよ。
No.3
- 回答日時:
申し訳ありません。
こちらは実行したパスにスペースを含んでいなかったので、手間を取らせてしまったようですね。
ついでなので訂正します。
ソースコードの最後の
return 1;
も
return 0;
の間違いです。
1ではエラー終了扱いになるので。
この回答への補足
説明に漏れがありましたので、
補足させていただきます。
【流れ】
sample.txt読み込み
↓
output.txt書き出し
------------------(ここまではulisrtさんにご協力いただきました。)
↓
sample.txtを削除
どうぞ宜しくお願い致します。
ulisrtさん、
わざわざありがとうございます。
本当に助かりました。
ulisrtさんの教えていただいたコードに、
ファイルを削除する内容のコード付け加えようとしているのですが、
なかなか上手くいきません。
厚かましいお願いなのですが、
どうかご指南いただけないでしょうか。
【追加しようとしているコード】
#include <stdio.h>
int main(void)
{
char *filename = "sample.txt";
if( remove( filename ) == 0 ){
printf( "%sファイルを削除しました", filename );
}
else{
printf( "ファイル削除に失敗しました" );
}
return 0;
}
どうぞ、宜しくお願い致します。
No.1
- 回答日時:
まず、ファイルの内容を直接更新するのはハードルが高いと思います。
(初心者であれば、なおさら)なので、考え方だけ書きますと
「元のファイル<1>を1行ずつ読み込み、必要な行ならば別のファイル<2>に書き出す」
方針が良いのでは?
さらに"元のファイル名"のものだけ残したいとするのであれば、
[a] <2>を"元のファイル名"と違う名前で新しく作成する
→ 終了したら、<1>を削除して、<2>を"元のファイル名"にリネーム
または
[b] "元のファイル名"を別名にリネームしたものを<1>とする
<2>を"元のファイル名"で新しく作成する
→ 終了したら、不要となった<1>を削除する
といった段取りで。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaマクロについて 【1.csv】をもとに【商品.csv】に有るものを【有り.csv】として名前を 1 2023/05/18 07:58
- MySQL #1062 - '0' は索引 'PRIMARY' で重複しています。とでています。 1 2023/01/01 06:13
- Visual Basic(VBA) vbaマクロについて 次のようなマクロを組みたいです。 自分は初心者なので全くわかりません。 詳しく 8 2023/05/18 18:38
- C言語・C++・C# C言語初心者です、、、お助けください 2 2023/03/14 20:08
- Excel(エクセル) Googleスプレッドシートで、あるセルの値に応じて行を自動挿入したい 急いでいます! くわしい方、 3 2023/03/06 19:05
- 食べ物・食材 美味しいバナナ 100円前後のバナナしか食べた事がなくて。スーパーで買えるバナナと高級なバナナのお味 9 2022/06/14 12:21
- Visual Basic(VBA) VBA 検索と入力 Excel ブック ぶぶぶ シート ししし 列V 検索対象の列です 最終行は、お 6 2023/05/17 01:40
- Excel(エクセル) エクセルで2つの表を比較して、文字列が同じだが、その行のある値が違うものを抽出したい 1 2022/10/06 21:48
- Visual Basic(VBA) 特定の文字を条件に指定範囲のデータを貼り付けるVBA 3 2023/01/15 06:14
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
ファイル内のデータを1行削除する方法
C言語・C++・C#
-
C言語---ファイルに出力したデータをすべて消去する方法
C言語・C++・C#
-
ファイル書込みで一行もしくは部分的に上書きする
PHP
-
-
4
テキストファイルの文字列の削除
C言語・C++・C#
-
5
fopne で失敗する原因
C言語・C++・C#
-
6
C言語にて構造体のメンバがNULLであるかを判定するサンプルを作成して
C言語・C++・C#
-
7
C言語でテキストファイルの内容を置換して保存したい
C言語・C++・C#
-
8
ファイルから読み取った改行文字を消す方法
C言語・C++・C#
-
9
テキストファイルの空行をスキップして次の行をリードする
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のfor文です。 繰り返しの...
-
fgetsなどのときのstdinのバッ...
-
間接操作のレベルとは
-
CStringをwchar_tに変換したい
-
バイトスワップをやりたい
-
c言語でユーザ関数を利用して入...
-
C言語の入力した文字を反転させ...
-
atoi( ) の反対をやりたい
-
文字列から空白を取り除きたい...
-
Linuxでフォルダ内全ファイル名...
-
enumの記述について。
-
配列をnビットシフトする
-
ユニコード文字列の分割
-
DPマッチング
-
C言語です
-
RGB→YUV変換のプログラム
-
C言語のビットフィールドについて
-
c++ 文字列を入力して、一文字...
-
C言語のポインターで詰まっている
-
ワイルドカードを用いた文字列検索
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
charからLPTSTRへの変換方法
-
文字列から空白を取り除きたい...
-
C言語の入力した文字を反転させ...
-
'const char *' 型は 'char *' ...
-
配列をnビットシフトする
-
str系関数を使わずに二つの文字...
-
int main()の・・・
-
atoi( ) の反対をやりたい
-
CStringをwchar_tに変換したい
-
c++ 文字列を入力して、一文字...
-
switch文で文字を比較すること...
-
干支のプログラム
-
3桁区切(コンマ)記号をつけ...
-
絶対パスからのファイル名の切...
-
間接操作のレベルとは
-
間接参照のレベルが異なっています
-
型変換
おすすめ情報