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で質問しましょう!
似たような質問が見つかりました
- フリーソフト テキストファイル内を検索したい 1 2022/06/01 08:33
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- Visual Basic(VBA) WordのVBAについて 5 2023/01/11 14:38
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- その他(ソフトウェア) 一太郎付属の”全件検索”ツールの不具合 3 2023/07/25 15:03
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- ドライブ・ストレージ Windows10でのファイル内の文字列検索 SSDに寿命? 4 2022/07/12 03:25
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
VBAでの Replace関数で、ワイル...
-
文字列からタブコードを取り除...
-
Excelで3E8を3.00E+8にしない方...
-
【Excel VBA】複数ある特定の文...
-
MS SQLServer のSQLで文字列の...
-
エクセル 数値データを桁をそ...
-
Excelで指数表現しないようにす...
-
VBの「As String * 128」とは?
-
エクセルで文字列の最大値を抽...
-
同一セル内に関数と文字列を同...
-
エクセルで文字列をtxtファイル...
-
ORCLEでの小数の表示方法の変更...
-
Left関数とRight関数を合わせた...
-
Pro c/c++ でホスト変数の後に....
-
VBscriptからバッチに変数を渡...
-
Excelはなんで先頭の0を消すん...
-
16進数を10進数に簡単に変換す...
-
【COBOL】文字列から数値項目に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
Excelで3E8を3.00E+8にしない方...
-
VBAでの Replace関数で、ワイル...
-
Excelで指数表現しないようにす...
-
[C言語]fputsとfprintfの違い
-
エクセルで文字列をtxtファイル...
-
同一セル内に関数と文字列を同...
-
エクセルで文字列の最大値を抽...
-
Excelはなんで先頭の0を消すん...
-
MS SQLServer のSQLで文字列の...
-
エクセル 数値データを桁をそ...
-
Left関数とRight関数を合わせた...
-
VBA2005 16進を2桁で表示したい。
-
VBの「As String * 128」とは?
-
Msgboxの×が押されたとき
-
sedなどで、特定の文字列の後の...
-
【Excel VBA】複数ある特定の文...
-
OnTime 使用時のプロシージャへ...
おすすめ情報