外部ファイル
123基準あいうえお 基準1かき くけこ 基準2さしす[改行]
45678基準たち つてと 基準1な にぬねの 基準2はひふ へほ[改行]
・・・(以下同様、行によって半角ペースの数が違います。)
上のような日本語を含む外部データがあります。
これをfgetsで1行読み込み、以下のようなことをしたいのですが、C言語ではどのようにすればよいでしょうか?
基準の文字を消し、かつ、基準1,2を含むのそ間の文字
も消し、別のファイルに書き出したい。
基準、基準1,2は各行に1つだけ存在し、全角文字を含みます。
No.1ベストアンサー
- 回答日時:
だいたい以下のようなプログラムになります。
テストしました。
ですが、エラー処理をしていないので、自信なしにします。
また、日本語コードが、(いわゆる)JISコードだと動かないと思います。
シフトJISやEUCなどなら大丈夫でしょう。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LINE_MAX 1000 /* 一行の最大長*/
int main(void){
char *line_src;/*加工前の行*/
char *line_dst;/*加工後の行*/
char *base = "基準";
char *base1 = "基準1";
char *base2 = "基準2";
char *b, *b1, *b2; /*基準、基準1、基準2へのポインタ*/
int bl, bl2; /*基準、基準2の長さ*/
FILE *fp_src;/*読み込みファイル*/
FILE *fp_dst;/*書き出しファイル*/
char *p, *q;
line_src = (char *)malloc(LINE_MAX);
line_dst = (char *)malloc(LINE_MAX);
fp_src = fopen("ファイル1.txt", "r");
fp_dst = fopen("ファイル2.txt", "w");
bl = strlen(base);
bl2 = strlen(base2);
while(fgets(line_src, LINE_MAX, fp_src) != NULL){
/*基準文字列の検索*/
b = strstr(line_src, base);
b1 = strstr(line_src, base1);
b2 = strstr(line_src, base2);
/*本当はここで、b, b1, b2の位置関係が正しいかのチェックが必要。*/
/*文字列を部分ごとにコピー*/
p = line_src;
q = line_dst;
while(p < b){
*q = *p;
p++;
q++;
}
p = b + bl;
while(p < b1){
*q = *p;
p++;
q++;
}
p = b2 + bl2;
while(*p != '\0'){
*q = *p;
p++;
q++;
}
*q = '\0';
fputs(line_dst, fp_dst);
}
return 0;
}
もっとも、この手の処理はC言語には向いてません。
AWKというツールを使えば
{
sub("基準", "")
sub("基準1.*基準2", "")
}
という実質3行のスクリプトだけで、
上記のプログラムとだいたい同じことをします。
(エラーにも強くなります。)
ご回答ありがとうございました。
こちらの環境でも動作確認できました。
AWKという言語は知らなかったので、
こちらも、頑張って習得したいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/10 08:51
- Excel(エクセル) EXCELでの文字・数字入力の基本について教えてください。 2 2023/05/29 23:17
- デスクトップパソコン デスクトップpcを買います。 値段が妥当か見てください。 PC基本部 ESPRIMO WD2/F3 4 2022/05/14 06:58
- 弁護士・行政書士・司法書士・社会保険労務士 行政書士試験の行政法についての質問になります。 行政法の行政手続法についての質問になります。 問 意 1 2023/08/09 13:35
- 損害保険 交通事故の慰謝料 通院について 半年程まえに車が横から突っ込んできてむちうちになり接骨院と整形外科に 2 2023/03/20 17:14
- ビジネスマナー・ビジネス文書 私の所属する公的機関の文書はとても読みにくく、おそらく、以下が原因のように思われます。 フォントはゴ 1 2022/12/01 07:35
- 法学 定款に株主に株式割り当てを受ける権利を与えるにつき基準日の定めがない会社が当該基準日を定めて募集事項 1 2023/01/31 04:53
- 一戸建て 注文住宅の総費用について 2 2022/08/13 17:12
- 日本語 日本語的にどういう意味か伺いたいのですが、以下の画像に書いてある診断基準A(以下の3点で示される)と 3 2022/09/16 17:57
- 英語 英語で「1年半」と言いたい時、「a year and a half/one and a half y 2 2023/07/28 00:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語でのfscanfについて
-
複数ファイルの同時読み込みの...
-
C言語にてXMLファイルから任意...
-
ファイルへの書込み処理が異常...
-
datファイルの読み込み
-
【C言語】ファイルを読み込んで...
-
fscanfで格納された変数がおか...
-
VisualStudioでのファイルの入...
-
ファイル出力で改行を入れたい!
-
同時にファイル読み込み 書き込み
-
差分ファイルを読み込んで解析する
-
テキストファイル内に対して, ...
-
ガンマ変換 C言語でプログラ...
-
C言語でファイル名を変数にした...
-
C言語でのCSVソートとデータ抽...
-
ファイル読み込み EOF 判定
-
fopenでファイル名に、変数を使...
-
テキストを一文字以上ずつ読み...
-
自己相関関数を求めるプログラ...
-
C言語のファイル入出力の問題です
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数ファイルの同時読み込みの...
-
ファイルへの書込み処理が異常...
-
C言語でファイル読み書きを早く...
-
c言語でのfscanfについて
-
fopenでファイル名に、変数を使...
-
ファイル出力で改行を入れたい!
-
C言語にてXMLファイルから任意...
-
CRC32の計算方法
-
fgets( ) の返り値は何?
-
InternetReadFileを使ったファ...
-
【C言語】ファイルを読み込んで...
-
VisualStudioでのファイルの入...
-
commons-netでのFTP送信について
-
日本語ファイル名のFTPについて
-
fgets関数の利用 c言語
-
C言語でコマンドmvを実行
-
「コマンドライン引数チェック...
-
C言語でセグメンテーションエ...
-
構造体のメンバにファイルポイ...
-
エラー C2664
おすすめ情報