
こんにちは!!
ご質問させてください。
右辺値のダブルクオートくくりの
文字列をテキストから読み込みファイルに書き込む処理ですが.....
うまく取れません。下記にソースコードを提示しましたので
一読の上アドバイスいただけたらと思います。
テキストファイルのないようは
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
iconv_open失敗
-
2曲同時再生するにはどうした...
-
fgetsなどのときのstdinのバッ...
-
干支のプログラム
-
テキストデータをそのままバイ...
-
間接参照のレベルが異なっています
-
文字列から空白を取り除きたい...
-
構造体の各メンバにfor文からア...
-
fgetsについて
-
'const char *' 型は 'char *' ...
-
c++ 文字列を入力して、一文字...
-
文字列がNULLか空文字列かの判定
-
atoi( ) の反対をやりたい
-
プログラム
-
【C言語】構造体内の領域解放(...
-
C言語の入力した文字を反転させ...
-
スタックポインタを使って,1...
-
charからLPTSTRへの変換方法
-
CStringをwchar_tに変換したい
-
C言語、このコードを実行したい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構造体の各メンバにfor文からア...
-
fgetsなどのときのstdinのバッ...
-
文字列から空白を取り除きたい...
-
C言語のfor文です。 繰り返しの...
-
CStringをwchar_tに変換したい
-
間接参照のレベルが異なっています
-
c++ 文字列を入力して、一文字...
-
C言語の入力した文字を反転させ...
-
charからLPTSTRへの変換方法
-
ネットワークにつながっている...
-
'const char *' 型は 'char *' ...
-
テキストデータをそのままバイ...
-
c言語でユーザ関数を利用して入...
-
atoi( ) の反対をやりたい
-
間接操作のレベルとは
-
-'0'の意味について
-
double型の値をchar配列に変換...
-
Linuxでフォルダ内全ファイル名...
-
配列をnビットシフトする
-
型変換
おすすめ情報