ページ 11

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

Posted: 2008年11月07日(金) 19:40
by ファルコン
テキストファイルから文字を抜き出したいと思っています。
ちなみにテキストファイルの中身ですが
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:テキストファイルより文字を抜き出す

Posted: 2008年11月07日(金) 19:45
by たかぎ
とりあえず、http://dixq.net/board/board.htmlを熟読してください。話はそれからです。

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

Posted: 2008年11月07日(金) 20:01
by ファルコン
失礼いたしました。次回より気をつけます。
本当にすみませんでした。
無礼を承知で質問のアドバイスを頂きたいのですが.....。

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

Posted: 2008年11月07日(金) 20:21
by たかぎ
> 次回より気をつけます。

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

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

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

pre使いました

Posted: 2008年11月07日(金) 20:24
by dic
#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使いました

Posted: 2008年11月07日(金) 20:32
by ファルコン
dicさん、たかぎさんご返信ありがとうございます。
セミコロンではなくダブルクオテーションでした。
何度も失礼いたしました。

Re:pre使いました

Posted: 2008年11月07日(金) 20:54
by たかぎ
> セミコロンではなくダブルクオテーションでした。

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

Re:pre使いました

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