文字列検索の質問です

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

文字列検索の質問です

#1

投稿記事 by C言語勉強中 » 15年前

テキストファイルからの文字列読み出しで
”Http Port=80”
とあった場合、ポート番号の80のみをstrcpyでコピーしたいのですが、
どうやれば実現できるでしょうか?

シエル

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

#2

投稿記事 by シエル » 15年前

ポート番号の前の文字が決まっているのであれば、strstrで今すぐ検索。 画像

C言語勉強中

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

#3

投稿記事 by C言語勉強中 » 15年前

早速の回答ありがとうございます。

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

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

C言語勉強中

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

#4

投稿記事 by C言語勉強中 » 15年前

すいません、ちょっと気になったので、再度質問させてもらいます。

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

フリオ

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

#5

投稿記事 by フリオ » 15年前

 
 strstrで見つかった文字列の先頭と、
それ以降の文字列の先頭の関係を考えてみては
どうでしょうか。
画像

シエル

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

#6

投稿記事 by シエル » 15年前

ポート番号の後ろはすぐ改行なのであれば、改行まで読むというようにすればよいのではないでしょうか?
テキストモードとバイナリモードとでは、Windows環境の場合改行コードが変わってくるので注意
して下さい。

C言語勉強中

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

#7

投稿記事 by C言語勉強中 » 15年前

>フリオさん
それ以降の文字列は、サーバー名やルートパスが書かれていますが、改行されています。

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

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

ちょっと通りますよ

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

#8

投稿記事 by ちょっと通りますよ » 15年前

汎用性を考慮する必要がなければ
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:文字列検索の質問です

#9

投稿記事 by シエル » 15年前

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

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

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

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


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

初級者

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

#10

投稿記事 by 初級者 » 15年前

テキストファイルを読むっていう質問なのに、
バイナリーモードの話が出てくる理由がさっぱりわかりません。

C言語勉強中

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

#11

投稿記事 by C言語勉強中 » 15年前

char *parameter = "Http Port=80";
char sPortNo[7];

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

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

閉鎖

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