• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHP ファイル読み取りについて。)

PHPプログラム初心者向けのファイル読み取り方法と数字計算について

このQ&Aのポイント
  • PHPプログラム初心者の方に向けて、テキストファイルから数字を読み取り計算する方法について解説します。
  • テキストファイルから数字を読み取り、指定したキーワードに対応する数字を取得する方法を紹介します。
  • ファイルの中に並んでいる文字と数字の間にはスペースがあり、指定したキーワードがあればその隣の数字を出力することができます。

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

読み込んだ行データをスペースで分解すればいいのではないでしょうか? データが仕様どおりだと仮定していいのであれば(細かいエラー処理を省けば)、下記のように書けると思います。 <?php $data = file(データファイル名); $sum = 0; foreach($data as $line) { list ($text, $nums) = explode(" ", $line, 2); $num = intval(trim($nums)); print $num . "<br />"; $sum += $num; } print $sum;

rieqop7
質問者

お礼

ありがとうございます。参考になりました。

その他の回答 (2)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

ANo.1です。 >ここで、ユーザの入力に対して、 >「もじ」があれば 「もじ」のチェックを書き漏らしました(汗 #まぁ、$textをチェックして処理すればいいだけなので #簡単に組み込めるでしょう でも「あれば」というのが完全一致なのか部分一致でも含めるのか仕様として明確にしておかないといけません(普通は部分一致だと解釈してstrposあたりでチェックしますね)。 (蛇足) 「ユーザーの入力に対して」という意味ががわかりません。入力($_POSTや$_GET)が見当たらないのですが・・・。テキストファイルのデータが「ユーザーの入力を保存したもの」という意味で書かれたのでしょうか?

rieqop7
質問者

お礼

ありがとうございます。参考になりました。

rieqop7
質問者

補足

ありがとうございます。わざわざ時間を割いていただき、とても感謝しています。 ユーザの入力に対してというのは、 テキストボックスに書いてもらった文字をMeCabというツールで単語に分けて その単語を配列に入れた状態で取得しています。 その配列とファイルの単語が一致すれば、数字を出力したいのです。 これが入力をしてもらってその文章を単語に分けてアウトプットするコードです。 <?php $text = $_POST['name']; $mecabpath = 'C:\Progra~1\MeCab\bin\mecab.exe -O wakati'; $descriptorspec = array( 0 => array("pipe","r"), // stdin は mecab が読み込むパイプ 1 => array("pipe","w") // stdout は mecab が書き込むパイプ ); $process = proc_open($mecabpath, $descriptorspec,$pipes); if(is_resource($process)){ // $pipes はこの時点で次のような形を取っています。 // 0 => mecab の stdin に繋がれた書き込み可能なハンドル // 1 => mecab の stdout に繋がれた読み込み可能なハンドル fwrite($pipes[0], $text); fclose($pipes[0]); while(!feof($pipes[1])){ $result .= fread($pipes[1], 4096); } fclose($pipes[1]); proc_close($process); echo $result; } ?> また少しでもヒントがありましたら、よろしくお願い致します。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

少し手を抜いて <?PHP $p=fopen("hoge.txt","r"); $word="hogehoge"; $val=0; while(($data=fgetcsv($p,1000," "))!==false){ if($data[0]===$word){ print $data[1]."<br>\n"; $val+=(int) $data[1]; } } print $val; ?>

rieqop7
質問者

お礼

ありがとうございます。参考になりました。

関連するQ&A