ページ 11

文字列検索の質問です

Posted: 2010年8月29日(日) 21:00
by C言語勉強中
テキストファイルからの文字列読み出しで
”Http Port=80”
とあった場合、ポート番号の80のみをstrcpyでコピーしたいのですが、
どうやれば実現できるでしょうか?

Re:文字列検索の質問です

Posted: 2010年8月29日(日) 21:13
by シエル
ポート番号の前の文字が決まっているのであれば、strstrで今すぐ検索。 画像

Re:文字列検索の質問です

Posted: 2010年8月29日(日) 21:36
by C言語勉強中
早速の回答ありがとうございます。

strstr()を使用することで解決しました。
ありがとうございましたm(__)m

また、質問の際は宜しくお願いします。

Re:文字列検索の質問です

Posted: 2010年8月29日(日) 22:02
by C言語勉強中
すいません、ちょっと気になったので、再度質問させてもらいます。

ポート番号が変わることがあった場合、”Http Port=”までは確定しているので、
strstrで文字列が一致した場合、以降の文字列を取得する、というようにしたいの
ですが、どうすれば出来るでしょうか?

Re:文字列検索の質問です

Posted: 2010年8月29日(日) 22:15
by フリオ
 
 strstrで見つかった文字列の先頭と、
それ以降の文字列の先頭の関係を考えてみては
どうでしょうか。
画像

Re:文字列検索の質問です

Posted: 2010年8月29日(日) 22:19
by シエル
ポート番号の後ろはすぐ改行なのであれば、改行まで読むというようにすればよいのではないでしょうか?
テキストモードとバイナリモードとでは、Windows環境の場合改行コードが変わってくるので注意
して下さい。

Re:文字列検索の質問です

Posted: 2010年8月29日(日) 23:08
by C言語勉強中
>フリオさん
それ以降の文字列は、サーバー名やルートパスが書かれていますが、改行されています。

>シエルさん
改行まで読むというのは、"\n"までということですよね?

改行コードが変わるのに注意というのは具体的にどう注意すればいいのですか?
いろいろ検索したのですが、よくわかりません。自分はwindows xp環境で.txtファイルの読み込みを
しようとしています。

Re:文字列検索の質問です

Posted: 2010年8月29日(日) 23:08
by ちょっと通りますよ
汎用性を考慮する必要がなければ
char *parameter = "Http Port=80";
char sPortNo[7];
strcpy(sPortNo, "parameter[10]); //10じゃなかったら11でも9でも調整 parameter[10]に&つけてくださいね
                //文字化けするので編集できませんでした

以前、私が作ってた時は、"PROTOCOL_VERSION = 2.0.1"とか
色々その他の長さの違うパラメータも扱う必要があったので、"A = B"といった一定の書式にしました。
即席iniファイルですね。

"HTTP_PORT = 80"
sscanf(parameter,"%*s %*c %s",sPortNo);

//整数値のみ必要な場合
int PortNo;
sscanf(parameter,"%*s %*c %d",&PortNo);

(追記)
sscanf(parameter,"Http Port=%s",sPortNo);//まぁ冗談はさておき、こういうのがいいでしょうねw

画像

Re:文字列検索の質問です

Posted: 2010年8月29日(日) 23:27
by シエル
>改行まで読むというのは、"\n"までということですよね?
>改行コードが変わるのに注意というのは具体的にどう注意すればいいのですか?
>いろいろ検索したのですが、よくわかりません。自分はwindows xp環境で.txtファイルの読み込みを
>しようとしています。

Windowsは改行コードを0x0D0A(\r\n)として表すらしいのですが、
fopen("test.txt","r")としてテキストモードで読むと勝手にこの改行コードを"\n"だけに
直した状態で読み込んでくれるんです。

逆にfopen("test.txt","rb")としてバイナリモードで読むと、そのままデータを読み込むので
"\r\n"として改行コードを読んでしまいます。

そのため、バイナリモードで読んだときは、"\r"の文字があったら改行の始まりを表すことになります。


なので、もしテキストモードで読み込むのであれば"\n"まで読むということで構いません。

Re:文字列検索の質問です

Posted: 2010年8月29日(日) 23:34
by 初級者
テキストファイルを読むっていう質問なのに、
バイナリーモードの話が出てくる理由がさっぱりわかりません。

Re:文字列検索の質問です

Posted: 2010年8月31日(火) 02:11
by C言語勉強中
char *parameter = "Http Port=80";
char sPortNo[7];

①strcpy(sPortNo, &parameter[10]);
②sscanf(parameter,"Http Port=%s",sPortNo);
上記実装で、確実にsPortNoに"80"を設定することが出来ました。
①と②どちらでも出来るのですが、汎用性を考えるならどちらが好ましいでしょうか?

>シエルさん
丁寧な説明ありがとうございました。
バイナリモードで読むときは気をつけます。