No.3ベストアンサー
- 回答日時:
★文字列の検索関数を使えば良い。
・テキストの中身の検索は、行単位で文字列を取得(fgets)してから、この文字列内に
検索文字列の有無をチェックします。この有無は文字列から文字列を検索する関数
『strstr』関数を使うのが便利です。また、文字列から1文字の検索を行う場合は
『strchr』関数を使います。質問では、特定の文字が含まれている行となっていますが
・検索するのは1文字、文字群、文字列のどれですか?
これによっていろいろと代わりますよ。処理が…。
・とりあえず文字列から特定の文字列を含まれた行を抽出するサンプルを下に載せます。
サンプル:
char buff[ 256 ];
char *find = "検索文字列";
FILE *fp; ←読み込み用
FILE *fo; ←抽出用
省略(fopen×2つ)
:
while ( fgets(buff,sizeof(buff),fp) != NULL ){
if ( strstr(buff,find) != NULL ){
fputs( buff, fo );
}
}
:
省略(fclose×2つ)
解説:
・上記のサンプルでは、行単位でテキストの中身を取得して、この文字列から検索文字列(find)が
含まれるか『strstr()』関数でチェックしています。見つかると『NULL』以外を返します。
・そして、見つかったらば行単位で『fputs』関数で出力しています。
これで見つかった行だけが、新たに作ったファイルに書き込まれていきます。→抽出です。
・また『strstr()』関数の部分を
『if ( strchr(buff,'a') != NULL ){ … }』とすると『a』の文字が含まれる行のみを抽出します。
『if ( strspn(buff,"+-*/") != 0 ){ … }』とすると『+-*/』の文字群が含まれる行のみを抽出します。
検索する文字とは、1文字、文字群、文字列のどれですか?
・以上。おわり。→上記のを参考にして下さい。
参考URL:http://www9.plala.or.jp/sgwr-t/lib/strspn.html,h …
No.2
- 回答日時:
補足要求どおり少し判断材料が足り何のですが、なんとなくわかります。
とりあえずこんなものかと
調べるテキストファイルの中身がこれだったとします。
//read.txt-------
abcdefg
hijklmn
opqrstu
vwxyz
//---------------
int main( void )
{
FILE *fp;
char str1[ 1024 ];
char str2[ 1024 ];
bool bFlag = false; //ファイル内にあったかを判定するフラグ
gets( str1 );
if( (fp = fopen( "read.txt", "r" )) == NULL )
{
printf( "ファイルオープン失敗" );
return -1;
}
else
{
while( 1 )
{
fgets(str2, 1024, fp); //ファイル内から1行読み込み
if( feof(fp) ) break;
for( int i=0; str2[ i ]!='\0'; i++ )
{
for( int j=0; str1[ j ]!='\0'; j++ )
{
if( str1[ j ] == str2[ i ] )
{
bFlag = true;
i++;
}
else
{
bFlag = false;
break;
}
}
if( bFlag == true ) break;
}
if( bFlag == true ) break;
}
fclose( fp );
}
if( bFlag == false )
{
printf( "その文字列はありませんでした。" );
return -2;
}
else
{
printf( "その文字列はありました。" );
if( (fp = fopen( "write.txt", "w" )) == NULL )
{
printf( "ファイルオープン失敗" );
return -1;
}
else
{
fprintf( fp, str2 );
fclose( fp );
}
}
return 0;
}
適当も入っているので参考程度にしてください。
No.1
- 回答日時:
> テキストの中身の検索と抽出方法がいろいろ試してみましたがわかりません。
具体的にどういう検索と抽出を行いたいのか書かれていませんし、どう「いろいろ試し」たのかもかかれていません。
これでは、アドバイスのしようがないということは、理解できますでしょうか?
1. 具体的にどういう検索と抽出を行いたいのか。
2. 何を試してみたのか。
補足してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
テキストファイル内に対して, 特定の単語を探すプログラム c言語
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
変数内に入った文字列の結合 UWSC
-
“丸(〇/○/◯)”に似た文字…
-
エクセルで文字列をtxtファイル...
-
16進数を10進数に簡単に変換す...
-
VBAでの Replace関数で、ワイル...
-
Left関数とRight関数を合わせた...
-
エクセルで2.01E+04表示を201E2...
-
BAHTTEXT関数?!
-
VBScriptでEUC文字列をSJIS文字...
-
2ちゃんねるの使い方
-
aaa.bbb.ccc という、「ドット...
-
エクセルVBAの Select Case構文
-
文字列のエスケープ処理
-
Excelで3E8を3.00E+8にしない方...
-
同一セル内に関数と文字列を同...
-
latex 数式でテキストを書く
-
16進数から10進数へ
-
【Excel VBA】複数ある特定の文...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
VBAでの Replace関数で、ワイル...
-
Excelで3E8を3.00E+8にしない方...
-
エクセルで文字列をtxtファイル...
-
【Excel VBA】複数ある特定の文...
-
Excelで指数表現しないようにす...
-
Left関数とRight関数を合わせた...
-
同一セル内に関数と文字列を同...
-
VBの「As String * 128」とは?
-
エクセルで文字列の最大値を抽...
-
VBA2005 16進を2桁で表示したい。
-
Msgboxの×が押されたとき
-
MS SQLServer のSQLで文字列の...
-
エクセル 数値データを桁をそ...
-
C#で年月を比較する
-
16進数を10進数に簡単に変換す...
-
アクセスで特定の数字以外(複...
-
Pro c/c++ でホスト変数の後に....
おすすめ情報