• ベストアンサー

ファイルの中身検索と表示

Cでの作成についてなんですが、 fopenでテキストファイルを開き、テキストの中身の 特定文字が含まれている行を新に作ったファイルの中に 書き込みたいんですが、テキストの中身の検索と 抽出方法がいろいろ試してみましたがわかりません。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答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,http://www9.plala.or.jp/sgwr-t/c/sec17.html
maikutyeki
質問者

お礼

検索するのは文字郡です。 サンプルを参考にさせていただきました。 大変役に立ちました。ありがとうございました。

その他の回答 (2)

  • koedame
  • ベストアンサー率33% (10/30)
回答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; } 適当も入っているので参考程度にしてください。

maikutyeki
質問者

お礼

ありがとうございます。 参考にさせていただきます。

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.1

> テキストの中身の検索と抽出方法がいろいろ試してみましたがわかりません。 具体的にどういう検索と抽出を行いたいのか書かれていませんし、どう「いろいろ試し」たのかもかかれていません。 これでは、アドバイスのしようがないということは、理解できますでしょうか? 1. 具体的にどういう検索と抽出を行いたいのか。 2. 何を試してみたのか。 補足してください。

関連するQ&A

  • 大量のテキストファイル・・・・中身の検索方法

    フォルダの中に大量のテキストファイルがあります。 この大量のファイルの中から、テキストに書かれている特定の文字列だけを検索したいのです。 ファイルを一つずつ開いて検索していると日が暮れてしまいます。 一括して全ファイルの中身を検索する事は出来ないでしょうか? よろしくお願いします。

  • テキストの中身を検索してファイルを見つける

    メモ帳などのテキストファイルの「中身の文字」から検索してファイルを探すとき、 秀丸の「grepの実行」を使えばいいと聞いたのですが、「検索するフォルダ」というところが がグレードアウトして使用できません。同じく、grepして置換も使えません どうすればいいのでしょうか?

  • 文字列検索 複数のテキストファイル

    最近趣味でC言語を始めたのですが、 大本のリストを含んだテキストファイルに含まれる文字列 【テキストの中身】 osaka nagoya tokyo 上のリストを行ごとに読み込んで もう一つのファイルから検索して該当する文字列を含む行以外を削除するようにしたいのですが何か良い方法はないでしょうか? 色々調べながらやってはいるもののまだまだ勉強不足なせいかわからず困っております。よろしければご教授お願いします。

  • いっぱいあるテキストファイルの中身を置換したい

    テキスト内容の置換について正規表現を用いた場合について?どなたか教えてください。 テキストが100個くらいあるので「Greplace」を使っています。他にいい方法があればソフトは使いませんが・・・ <br> テキストの中身はだいたい300行くらいです。 中身は例として下記のような感じです。 A111_selection_TXCDISU・・・・・・・・・・・・ B222_boot_TXCDISU・・・・・・・・・・・・ C333_DDcommand_TXCDISU・・・・・・・・・・・・ A234_Xmensanjo_TXCDISU・・・・・・・・・・・・ ・ ・ ・ ・ ・ やりたいことは特定のキーワードをor検索をしてそのキーワードが“ない”行だけを別の文字に置換したいんです。 キーワードが多く50ワードくらいあります。 A111|B222|C333と区切って検索は出来るのですがこれを含む列は置換せずその他を置換したいのですがどうしたらよいのでしょうか? 欲しい結果は下記のようにです。 A111|B222|C333を含む行以外をmoeyanで置換 A111_selection_TXCDISU・・・・・・・・・・・・ B222_boot_TXCDISU・・・・・・・・・・・・ C333_DDcommand_TXCDISU・・・・・・・・・・・・ A234_moeyan_TXCDISU・・・・・・・・・・・・ ・ ・ ・ ・ ・

  • 検索速度を速くするためには?

    Visual Stdio 2005を使用してダイアログを作成しています。 エディットボックスからキーワードを入力して、テキストファイルから1行ずつ読み込みながら検索して、見付かればリストボックスに追加していますが、もっと検索速度を上げたいと思っています。 ちなみに、ファイルの中身は   1,あいうえお   2,かきくけこ   3,さしすせそ   4,あいうえお という感じで、100000行近くあります。 また、エディットボックスに入力した文字列とテキストファイルから読み込んだ文字列はCString型で、Findを使っています。 検索速度を上げる方法があれば教えて頂きたいです。よろしくお願いします。

  • ファイルの中身に対する再帰的検索

    初心者です。 テキストファイルの中身を調べて、その中に特定の拡張子を持ったファイル名があれば更にその中身を調べていって、階層構造になったファイルを全て調べあげるスクリプトを作ろうとしています。 例えばfile1.txtの中身が ... hoge file2.txt file3.txt hogehoge ... だったとすれば、今度はfile2.txtおよびfile3.txtの中身に.txtという拡張子を持ったファイル名があるかどうか調べ、該当するものが無くなるまで調べていきます。 これらのテキストファイルは全て同じディレクトリ内に存在します。 どういう具合のループにすればよいのか想像がつきません。 アドバイスお願いします。

    • ベストアンサー
    • Perl
  • Java Mayaaファイルの中身を検索させる

    Windows 7 と 8 です。 エクスプローラの右上の検索で、PDFとかで識別できない文字で無い限り、普通のファイルなら 中の文字まで検索してくれますが Mayaa ファイルの場合検索してくれません。 ファイル名ならヒットしますが。 中身をコピーペーストさせるのもいいかもしれないですが、 1、手っ取り早く検索させる方法やツールはありますか? 2、なぜMayaaファイルの中身は見れないのでしょうか? 3、Mayaa以外でもこういうファイルはあるのでしょうか?

    • ベストアンサー
    • Java
  • VB.netで検索した文字の後の文字列を取得

    VB.net(2010)でテキストファイルから特定の文字を検索してその後にある文字列を取得するにはどのようにすれば良いでしょうか。 【具体例】 C:\testフォルダ以下にある複数のtextファイルから"aaa"の文字を検索して、その後にある"xxx"を取得する。(同じ行にある文字列) 【textファイルの中身】 111 aaa xxx 222 ご教示のほど、よろしくお願いします。

  • Excelファイルの中身で検索がしたいのです。

    Excelファイルの中身で検索がしたいのです。 1つのフォルダに3つのExcelファイルがあるとします。 A1.xls の中に[abc]と言う文字が入っています。 A2.xls の中に[xyz]と言う文字が入っています。 A3.xls の中に[abcxyz]と言う文字が入っています [abc]と言う文字が入っているExcelファイルを検索したいのです。 どうすれば良いのでしょうか ? (フリーソフト/シェアウェア等でも可) 宜しくお願い致します。

  • HTMLファイル内の文字列検索

    はじめて質問させていただきます,kokko1719です. 今,ExcelVBAを使ってツールを作成しています. その中で,フォルダ内にある複数のHTMLファイルから特定の文字列を検索し,抽出するコードを作成したいのですが,うまくいきません. 使っているExcelが2007なのでFileSearchを使うことができません. 一応,再帰処理を実装してファイルを探索するところまでは出来ている…と思います.(特定のフォルダを探しに行って○個見つかりましたとメッセージは出ます) その後のファイルを開き検索,特定のシートに抽出することができません. 現在作成しているコードでは,検索条件が1つしかないのですが, 実際は,HTMLファイルで使用している画像ファイル名を検索して抽出したいので,条件も複数指定したいと思っています(jpg,gif,pdfなど). ExcelVBAを学び始めて日が浅いため作業が止まってしまっています.きっと調べ方も悪いのでしょうが…. どうか教えていただけましたら幸いです.

専門家に質問してみよう