テキストファイルより文字を抜き出す

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ファルコン

テキストファイルより文字を抜き出す

#1

投稿記事 by ファルコン » 16年前

テキストファイルから文字を抜き出したいと思っています。
ちなみにテキストファイルの中身ですが
P_C="k123"+"CMOK"
P_M=MAX("MDMC","MKOM")
という感じで式の左辺とセミコロンでくくられた文字を抽出したいのですが
strchr,strtokやstrcpyなど文字列関数を使ってやっているのですが
うまくゆきません。どなたかアドバイスいただけたらと思います。
よろしくお願いします。
while (NULL != fgets(buf, sizeof buf,ft)){
//strcpy(cdmy,strtok(buf,"="));
// puts(cdmy);
//fprintf(fh, "#define %s output[obj[/url].outputs + 2].Analog\n", cdmy);
//for (i = 0; i < MAXFIELD; i++) {
tp = strtok(buf, "\"");
while( tp != NULL){
tp = strtok(NULL,"\"");
if(tp != NULL){
fprintf(fh, "#define %s output[obj[/url].outputs + 2].Analog\n", tp);
}
}
//if (tp != NULL){
// strcpy(cdmy, strtok(p, "\""));
// fprintf(fh, "#define %s output[obj[/url].outputs + 2].Analog\n",cdmy);
// }else{
// break;
// }
// }
//strcpy(cdmy, strtok(p, '"'));
//puts(cdmy);
//tp = strtok(NULL, "=\"");
//sscanf(b, "%7s%*[^\"]\"%[^\"]\"%*[^\"]\"%[^\"]", v);
//fprintf(fh, "#define %s output[obj[/url].outputs + 2].Analog\n", tp);
}
fclose(fh);
fclose(ft);

return 0;
}

たかぎ

Re:テキストファイルより文字を抜き出す

#2

投稿記事 by たかぎ » 16年前

とりあえず、http://dixq.net/board/board.htmlを熟読してください。話はそれからです。

ファルコン

Re:テキストファイルより文字を抜き出す

#3

投稿記事 by ファルコン » 16年前

失礼いたしました。次回より気をつけます。
本当にすみませんでした。
無礼を承知で質問のアドバイスを頂きたいのですが.....。

たかぎ

Re:テキストファイルより文字を抜き出す

#4

投稿記事 by たかぎ » 16年前

> 次回より気をつけます。

今回から改善して欲しいのですが...

> P_C="k123"+"CMOK"
> P_M=MAX("MDMC","MKOM")
> という感じで式の左辺とセミコロンでくくられた文字を抽出したいのですが

セミコロンがどこにも存在しません。
この情報だけでは、左辺を抽出することしかできそうにありません。
ちなみに左辺を抽出するだけなら、
char lhs[100+1]
fscanf(stream, "%100[^=]%*[^\n]%*c", lhs);
で十分な気がします。

dic

pre使いました

#5

投稿記事 by dic » 16年前

#include <stdio.h>

void main()
{
	while (NULL != fgets(buf, sizeof buf,ft)){ 
		strcpy(cdmy,strtok(buf,"=")); 
		puts(cdmy); 
		fprintf(fh, "#define %s output[obj[/url].outputs + 2].Analog\n", cdmy); 
		for (i = 0; i < MAXFIELD; i++) { 
			tp = strtok(buf, "\""); 
			while( tp != NULL){ 
				tp = strtok(NULL,"\""); 
				if(tp != NULL){ 
					fprintf(fh, "#define %s output[obj[/url].outputs + 2].Analog\n", tp); 
				} 
			} 
			if (tp != NULL){ 
				strcpy(cdmy, strtok(p, "\"")); 
				fprintf(fh, "#define %s output[obj[/url].outputs + 2].Analog\n",cdmy); 
			}else{ 
				break; 
			} 
		} 
		strcpy(cdmy, strtok(p, '"')); 
		puts(cdmy); 
		tp = strtok(NULL, "=\""); 
		sscanf(b, "%7s%*[^\"]\"%[^\"]\"%*[^\"]\"%[^\"]", v); 
		fprintf(fh, "#define %s output[obj[/url].outputs + 2].Analog\n", tp); 
	} 
	fclose(fh); 
	fclose(ft); 

	return 0; 
}

ファルコン

Re:pre使いました

#6

投稿記事 by ファルコン » 16年前

dicさん、たかぎさんご返信ありがとうございます。
セミコロンではなくダブルクオテーションでした。
何度も失礼いたしました。

たかぎ

Re:pre使いました

#7

投稿記事 by たかぎ » 16年前

> セミコロンではなくダブルクオテーションでした。

コロコロ質問内容を変更されてもどうしようもありません。
やはりhttp://dixq.net/board/board.htmlを熟読して、それにしたがって質問してください。
http://www.play21.jp/board/formz.cgi?ac ... &rln=23662を利用されるのもよいでしょう。

non

Re:pre使いました

#8

投稿記事 by non » 16年前

P_C="k123"+"CMOK"
P_M=MAX("MDMC","MKOM")
を抽出した結果は
P_Ck123CMOK
P_MMDMCMKOM
で、これをファイルに出力すればいいのでしょうか?
条件として、
この場合、ダブルコーテーションは必ず行内で対になっていると考えていいですか?
=は必ずありますか?
=より前にダブルコーテーションが現れることはありますか?

閉鎖

“C言語何でも質問掲示板” へ戻る