こんにちは!!
ご質問させてください。
右辺値のダブルクオートくくりの
文字列をテキストから読み込みファイルに書き込む処理ですが.....
うまく取れません。下記にソースコードを提示しましたので
一読の上アドバイスいただけたらと思います。
テキストファイルのないようは
k="seikyo"-"himawari"
k="north"+"seikyo"
これを読み込んだ場合.tファイルに書き込む内容は
seikyo
himawari
north
seikyo
ですが重複した場合は書き込まないようにプログラムしたつもりです。
seikyo
himawari
north
としたいと思っています。
希望通りの形にならないので皆様どうか
お力をお貸しください。よろしくお願いします。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<syslog.h>
#define MAX_REC_A 256
#define MAXFIELD 128
#define BUFFLEN 256
#define MAX 10000
#define MBF 1024
int makemoutputhrightside();
int
main(int argc ,char **argv)
{
makemoutputhrightside(argv[1]);
}
/* 右辺の値をとって.tファイルに書き込む関数 */
int
makemoutputhrightside(char sum[BUFFLEN])
{
FILE *ft;
FILE *fh;
int c;
char cPid[BUFFLEN];
char *p;
char *q;
char *str[BUFFLEN];
int flag = 0;
int i = 0;
int n = 0;
int k;
char filename[64];
char cdmy[MAX];
strcpy(filename,sum);
strcat(filename,".txt");
ft = fopen(filename, "r");
fh = fopen("moutput.t", "a");
if (ft == NULL || fh == NULL) {
syslog(LOG_ERR,"開けないファイルがあります。\n");
return 1;
}
//ファイルを1文字ずつ読み込む
while ((c = fgetc(ft)) != EOF) {
switch (c) {
case '"':
flag = 1 - flag;
/*右のクオート*/
if (flag == 0) {
cPid[i] = '\0';
p = strcpy(cdmy,cPid);
for(k = 0;k < n;k++){
if(*str[k] != *p)
continue;
if(strcmp(str[k],p) == 0)
break;
}
if(k < n)
continue;
q = malloc(strlen(p) + 1);
strcpy(q,p);
str[n] = q;
fprintf(fh, "%s ",q);
i = 0;
}
n++;
break;
case '\n':
if (flag == 1) {
cPid[i] = '\0';
fprintf(fh, "%s \n", cPid);
}
flag = 0;
}
i = 0;
break;
default:
if (flag == 1) {
cPid[i] = c;
if (i < BUFFLEN - 1) {
i++;
}
}
break;
}
}
/* ファイルの最後が改行じゃなかった場合 */
if (i>0) {
cPid[i]='\0';
fprintf(fh,"%s\n",cPid);
}
fclose(ft);
fclose(fh);
return 0;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
str系関数を使わずに二つの文字...
-
c++ 文字列を入力して、一文字...
-
fgetsなどのときのstdinのバッ...
-
文字列から空白を取り除きたい...
-
charからLPTSTRへの変換方法
-
C言語のポインターで詰まっている
-
コンパイルエラー invalid ope...
-
【C言語】文字型と整数型の違い
-
ファイル名である文字列からbas...
-
文字列中からある文字列とある...
-
プログラム
-
ヘキサ表現が上手く行かない
-
【C言語】テキストファイル内の...
-
CStringをwchar_tに変換したい
-
DPマッチング
-
配列をnビットシフトする
-
YUV⇔RGB変換がうまくいきません。
-
switch文で文字を比較すること...
-
型変換
-
間接操作のレベルとは
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
charからLPTSTRへの変換方法
-
文字列から空白を取り除きたい...
-
C言語の入力した文字を反転させ...
-
'const char *' 型は 'char *' ...
-
配列をnビットシフトする
-
str系関数を使わずに二つの文字...
-
int main()の・・・
-
atoi( ) の反対をやりたい
-
c++ 文字列を入力して、一文字...
-
CStringをwchar_tに変換したい
-
switch文で文字を比較すること...
-
干支のプログラム
-
絶対パスからのファイル名の切...
-
3桁区切(コンマ)記号をつけ...
-
間接操作のレベルとは
-
間接参照のレベルが異なっています
-
【C言語】文字型と整数型の違い
おすすめ情報