• 締切済み

phpでテキストファイルの特定のワードを抽出

タイトルの通りです。 phpを使い、テキストファイルの中に書かれている文字列をhtmlに表示することはできました。 <?php //ファイルを開く //モード[r]の読み込み専用 if (! ($fp = fopen ( "list.txt", "r" ))) { echo "ファイルが開けません。"; } while (! feof ($fp)) { $load = fgets ($fp, 4096); echo $load; } ?> このような感じです。 ですが、テキストファイルの中の特定の文字(例:美しい)を抽出したいのですが、どのようにプログラムを書いて良いかわかりません。 どなたかアドバイスをお願いします。

  • PHP
  • 回答数3
  • ありがとう数1

みんなの回答

  • t_ohta
  • ベストアンサー率38% (5078/13272)
回答No.3

> 現在ファイルの中に3つほど美しいという単語があります。なのでここではpreg_match_allを使っているということであってますか? はい、複数回出現する事を想定しています。 > また、実際に動かしてみました他が、"array"という文字が表示されうまく動かなかったです。 失礼しました echo $matcheItem[1]; ですね。

参考URL:
http://jp2.php.net/manual/ja/function.preg-match-all.php
shiro857
質問者

補足

回答ありがとうございます。 またリンクもありがとうございます。 少しずつですが、自分のやりたいことができてきているような気がします。 また一つ質問なのですが、 preg_match_all('/美しい|php/', $tx, $matches); print_r($matches); のように"美しい"と"php"というキーワードを抽出し配列に格納しました。 ですが、配列を確認してみると Array ( [0] => Array ( [0] => 美しい [1] => 美しい [2] => 美しい [3] => php ) )となっており1番目にArrayが格納されています。 またechoで美しいというキーワードを配列から取り出し表示しようとしました。 echo $matches[1]; このように書きましたが表示されません。どこが間違っているのでしょうか。 質問ばかりで申し訳ありませんが、どこが間違っているだけでも良いので、教えていただけると助かります。

  • t_ohta
  • ベストアンサー率38% (5078/13272)
回答No.2

> やりたいことは、テキストファイルの中の"美しい""綺麗"などの複数の単語を特定し抽出したいです。 > その後、その抽出した単語を配列に格納し、echoで引っ張り表示したいと考えています。 抽出してechoするだけなら、こんな感じじゃないでしょうか。 <?php $tx = file_get_contents('list.txt'); preg_match_all('/美しい/m', $tx, $matches); foreach ($matches as $matcheItem) { echo $matcheItem; }

shiro857
質問者

補足

回答ありがとうございます。 さっそく実装してみました。 <?php $tx = file_get_contents('list.txt'); preg_match_all('/美しい/m', $tx, $matches); foreach ($matches as $matcheItem) { echo $matcheItem; } ?> 現在ファイルの中に3つほど美しいという単語があります。なのでここではpreg_match_allを使っているということであってますか? また、実際に動かしてみました他が、"array"という文字が表示されうまく動かなかったです。

  • t_ohta
  • ベストアンサー率38% (5078/13272)
回答No.1

「美しい」を抽出してどうしたいかにもよります。 出現回数を調べたいのか、他の文字列に置き換えたいのか、その言葉の周囲の言葉を調べたいのか。 どんな事をしたいのでしょうか。

shiro857
質問者

補足

回答ありがとうございます。 phpはほとんど使ったことがないので初心者です。 やりたいことは、テキストファイルの中の"美しい""綺麗"などの複数の単語を特定し抽出したいです。 その後、その抽出した単語を配列に格納し、echoで引っ張り表示したいと考えています。 アドバイスなどありましたらよろしくお願いします。

関連するQ&A

  • 他のサーバーのファイルを大量に読み込んだら迷惑?

     他のサーバーにアクセスして、大量のhtmlファイルを開き、fgets()でそれらを読み込んだら、相手方のサーバーには迷惑になるでしょうか?  (以下のような感じです。URLの部分は、hを大文字で記述しています) <?php $fp = fopen("http://somewhere.org/page1.html","r"); while(!feof()){ $line = fgets($fp); fwrite($fp,$line); } fclose(); $fp = fopen("http://somewhere.org/page2.html","r"); while(!feof()){ $line = fgets($fp); fwrite($fp,$line); } fclose(); //・・・これを数十回くらい。 ?>  又、迷惑になる場合、ファイルを1つ読み込んだあと、sleep();で何秒か停止すれば迷惑かけずに済むでしょうか? もしそうなら、大体何秒くらいでしょうか?

    • ベストアンサー
    • PHP
  • 所有権root、600のファイルを読み書きしたいのですが…。

    所有権がrootでバーミッションが600のファイル (例えば、パスワードファイルなど) をPHPを使ってwebから読んだり書いたりしたいのですが、 どのようにしたら出来ますでしょうか? 例えば、次のようなコードです。 <?php $fp = fopen("/etc/shadow", "r"); while (!feof($fp)){ $line = fgets($fp, 4096); } fclose($fp); ?>

    • ベストアンサー
    • PHP
  • phpとフラッシュの連携

    今phpとフラッシュを連携する勉強をしているのですがどうしても動かないのでぜひ教えていただきたいです。 txt→php→swfの順にダイナミックテキストを使用して読み込むようにしています。 apacheとphpは動いています。MX2004を使用しています。 現在txt→phpやtxt→swfで表示はされるのですがtxt→php→swfとやると、何も表示されないのです。 変数やスクリプトを確認しても間違いっていません。 apacheやphpでフラッシュと連動させるときは何か他に設定などが必要なのでしょうか?よろしければ教えていただきたいです。 ちなみに下記にtxt、php、swfの中身を書いておきます。いずれも同じファイルの中にあります。 ・・・・・・・・・・・・・・・・・ txtの中(ファイル名はsamPHP01.txtです) テストです。 ・・・・・・・・・・・・・・・・・ phpの中(ファイル名はsam02a.phpです) <?php if (!($fileTxt = fopen ("samPHP01.txt", "r"))) { die("ファイルが開けません。"); } while (!feof($fileTxt)) { $vTxt = fgets ($fileTxt, 4096); } fclose($fileTxt); echo "txtIn=".$vTxt; ?> ・・・・・・・・・・・・・・・・・・・ swfの中(ダイナミックテキストのインスタンス名はphpTxt1です) varsData2 = new LoadVars(); varsData2.onLoad = function () { phpTxt1.text=this.txtIn; } varsData2.load("sam02a.php"); ・・・・・・・・・・・・・・・・・ よろしくお願いいたしますm(_ _)m

    • ベストアンサー
    • Flash
  • テキストの内容を変数に代入

    テキストの内容を変数に入れたいのですが、 改行している部分で読み込みが終わってしまうのですが どのようにすればいいのでしょうか? 下のプログラムでは1行しか変数に代入できません。 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #include<stdio.h> main(){ char a[500]; FILE *fp; fp = fopen("****.txt","r"); fscanf(fp,"%s",&a); fclose(fp); return 0; } +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ whileで回すと上手くいくとは思ったのですが、fscanfを回しても 上手くいかずわかりません。 whileとfgetsを使ってもみたのですがよくわかりませんでした。 教えて頂けたら幸いです。

  • fopenでファイルを読み込み、その取り込んだファイルを置換や修正したい。

    こんばんわ。 AというファイルにBというファイルを読みこもうと思うのですがうまくいきません。 ■a.php <?php // ファイルを読み込み専用でオープンする $fp = fopen('b.php', 'r'); // 終端に達するまでループ while (!feof($fp)) { // ファイルから一行読み込む $line = fgets($fp); // 読み込んだ行を出力する print $line; // <br>の出力 print "<br>"; } // ファイルをクローズする fclose($fp); ?> ■b.php <div class="title">コンテンツ</div> <?php $amin = 1; //最小値 $amax = 4; //最大値 $randevent = rand($amin,$amax); //値を表示 if ( $randevent == 1) echo "たちつてと"; // else if ( $randevent == 2) echo "さしすせそ"; // else if ( $randevent == 3) echo "かきくけこ"; // else if ( $randevent == 4) echo "あいうえお"; ?> と、二つのファイルはこのような内容です。 もちろんincludeやリクワイヤーで取り込めばすむのでしょうが、fopenで取り込んで表示させたいのです。 このままの文章だとPHPの構文ごとHPに表記されてしまいます。 Printにしているからでしょうか? fopenでPHPの機能ごと取り込むには方法はありませんでしょうか? includeだと取り込んだ際にPHP構文の置換や修正がきかなくて困るんです。 fopenで取り込むとPHP構文を「あいうえお」の部分を「なにぬねの」にstr_replaceで置換できると思ったのです。 a.phpの中にfopenを使いb.phpの中のPHP構文を機能させる方法はありませんか?

    • ベストアンサー
    • PHP
  • ファイルについて・・・。

    お願いいたします。 以下のソースは"samplefile.txt" が前提としてあることになって いますが、もしなかった場合このテキストファイルを作り出す仕組みをソースに加えたいんですが・・・。 2,3行目の間に「もしファイルがみあたらない時は・・」みたいな条件をつける??くらいしか自分の頭では思い浮かばず・・・ 何かアドバイスいただけないでしょうか??お願いいたします。 1 <?php 2 $fp = fopen("samplefile.txt", "a+"); 3 $count = fgets($fp, 15); 4 $count = $count++; 5 rewind($fp); 6 fputs($fp, $count); 7 fclose($fp); 8?> 9<p>あなたは <?php echo $count; ?> 人目のお客様です。

    • ベストアンサー
    • PHP
  • 2つの画像ファイルが異なるファイルだと判定したい

    PHPを使って2つの画像ファイルが異なるファイルであることを判定するプログラムを考えています。以下のように、画像ファイルを文字列として扱い、md5ハッシュ値を取得し、それを比較することで、画像ファイルが違うということを判別しています。 こちらですが、もし他に良いロジックをご存知の方がいらっしゃいましたら、ご意見いただければと思います。 よろしくお願いいたします。 <?php $hash1 = getMD5('hoge1.jpg'); $hash2 = getMD5('hoge2.jpg'); if ($hash1 == $hash2) { echo "同じ画像ファイルです。"; } else { echo "同じ画像ファイルではありません。"; } // 画像ファイルを文字列として扱い、 // md5ハッシュ値を取得する関数 function getMD5($image) { $fp = fopen($image, 'r'); $str = ''; while(!feof($fp)) { # 画像ファイルを1行ずつ読み込んで、文字列にする $str .= fgets($fp); } fclose($fp); // $strのmd5ハッシュ値を得る return md5($str); } ?>

    • ベストアンサー
    • PHP
  • 日本語が文字化けしないよう読み込み

    特定ファイルにある複数行の日本語文章を 「fgets」や「file_get_contents」などで画面に読み込む時は、 単純に「mb_convert_encoding」を使えば 良いと思ったのですが 下記のようには文法的にも使えませんでした。 -------------------------------------- <?php $fp = fopen("sample.txt", "r"); $fp = mb_convert_encoding($fp, "UTF-8"); ←※間違い if($fp){ flock($fp, LOCK_SH); while(!feof($fp)){ $data = fgets($fp); echo "$data<br>"; } flock($fp, LOCK_UN); } fclose($fp); ?> -------------------------------------- すでに書き込んである 日本語が複数行書かれたファイルから 文字化けしないようにデータを読み込んで表示するには どのような処理をしたら良いのでしょうか? 複雑な処理はまだ理解できないので 簡単な処理方法があれば お教えください。 よろしくお願いいたいます。

    • ベストアンサー
    • PHP
  • PHPカウンタのデータファイルのパスについて

    PHPカウンタのデータファイルをひとつ上の階層に置いて3つのページで共有したいのですが、 $fp="fopen("counter.dat"," "r+"); 上記パスを $fp="fopen("../counter.dat"," "r+"); このように記述するとエラーになってしまいます。 やり方が間違ってますでしょうか? 以下ソースです。 <?php $fp="fopen("counter.dat"," "r+"); $count=fgets($fp, 6); $count++; fseek($fp, 0); fputs($fp, $count); fclose($fp); ?><BR> <?php echo sprintf('%05d',$count); ?> 初心者の質問で申し訳ありませんが、 ご回答のほどよろしくお願い致します。

    • ベストアンサー
    • PHP
  • テキストファイルについて

    以前は、マップを作るときに下のようにしていたのですが char dungeon[5][5]={{0,0,0,1,1}, {1,1,0,1,1}, {1,0,0,0,1}, {1,1,0,1,1}, {1,1,0,0,0}}; for(i=0;i<5;i++){ for(j=0;j<5;j++){ else if(dungeon[i][j]==0)printf("+"); else printf("#"); } printf("\n"); } 最近、ファイルの入出力で読み込む事にチャレンジしています。 それで、メモ帳で書いたマップを使おうとしているのですが、 こんなのです。 1011111111111 1000000000001 1111111111101 1111100000001 1111100000001 1111100000001 1111100002001 1000000000001 1011111111111 fp = fopen("map.txt","r");の部分でテキストファイルを指定しますが、複数作った上のようなマップを切り替える時、どうすればいいんでしょうか? 質問が稚拙かもしれませんがよろしくお願いします。 #include <stdio.h> void map(void);//マップの表示関数の宣言 int main(){ map(); } void map(void));//マップの表示関数の定義 { FILE *fp; char str[1024];//これくらいでいいかな? //map.txtを読み込みモードで開く fp = fopen("map.txt","r"); //ファイルオープンに失敗したら if(fp==NULL){ //失敗を表示し終了 printf("ファイルのオープン失敗\n"); return -1; //exit;でもいいのかな? } //fgetsの戻り値がnullになるまで //strにファイルから内容を格納 while((fgets(str,256,fp))!=NULL){ //格納された文字を出力 printf("%s",str); } //ファイルを閉じる fclose(fp); }

専門家に質問してみよう