- 締切済み
テキストファイルからアドレスだけ抽出したい
下記のようなテキストファイルからアドレス部分だけを抽出するにはどうすればいいでしょうか?よろしくお願いします。 fsdiajfijdioajsfoiaj@ezweb.ne.jp たけし 1987 fdjkshfjkakfhjaskdkhdjaskfh@docomo.ne.jp みほ 1985 gdskl@yahoo.co.jp 先生 1960
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- Oh-Orange
- ベストアンサー率63% (854/1345)
★いろいろと方法がありますが、最も簡単な方法をご紹介しましょう。 ・行の先頭部分にアドレスの文字列が必ずあるのならば、最初に現れる空白までを 取得します。以下にサンプルを記述しておきます。 ●サンプル static VOID FuncGetAddress( char buff[], char *string ) { char *dest = buff; char *tail = string; while ( (*dest++ = *tail++) != '\0' ){ if ( *tail == 0x20 ){ ←最初の空白文字コード *dest = '\0'; break; } } } 最後に: ・引数 string にはファイルから1行取得した文字列を指定します。 ・引数 buff にはアドレス部分を抽出するバッファ領域(配列)を指定します。 ・簡単ですが上のサンプルで『アドレス』部分を抽出可能ですよ。
- sakusaker7
- ベストアンサー率62% (800/1280)
アドレス 空白 名前 空白 生年? というフォーマットなら、 awk だと awk '{print $1}' 入力ファイル > 出力ファイル ですんじゃうんですけどねえ。 あるいは正規表現による置換ができるまともなエディタなら、 .*$ を空文字列に置換するだけでお望みの結果になるのではないかと (わかりにくいかもしれませんが、先頭はスペースです)。 どうしてもCで、ということなら(フォーマットが前述のものだとして) fgets(buf, sizeof buf, ifp); //一行読み込み sscanf(buf, "%s", addr); //アドレス部取出し fprintf(ofp, "%s\n", addr); を繰り返せばいいんじゃないでしょうか。 #バッファオーバーフローにはくれぐれも注意
- nerosuke
- ベストアンサー率33% (39/115)
#1さんのエクセルを使ったほうが・・・ってのは 手作業でやれという意味ではないと思いますが。 私なら1000有ろうが、これ1回きりで行儀よく並んだデータならツールなんて作らず、多分エクセルも使わずエディタのキーマクロだけでやっちゃいますね。多分数分でできます。 何度も行う作業ならツールを作った方が良いでしょうね。 Cができるなら簡単だと思いますよ。 とりあえず、下記の質問が参考になるんじゃないでしょうか。 http://okwave.jp/qa2609782.html
- baber
- ベストアンサー率18% (17/92)
fgets() と strchr() と strcpy() を組み合わせても作れそうですね。
- osamuy
- ベストアンサー率42% (1231/2878)
fscanf()で読み取るとか。 詳しくはお使いの言語処理系のヘルプをご覧ください。 awkとかExcelを使った方が手っ取り早くて確実かも。 本当にCで実装する意味があるか確認してみては。
お礼
ご回答ありがとうございます。 fsdiajfijdioajsfoiaj@ezweb.ne.jp たけし 1987 fdjkshfjkakfhjaskdkhdjaskfh@docomo.ne.jp みほ 1985 gdskl@yahoo.co.jp 先生 1960 のような感じでこれが、1000件近くあるんで手作業ではちょっと… 私が使える言語がCのみということで、ここに投稿したのです。