- ベストアンサー
PHPプログラム初心者向けのファイル読み取り方法と数字計算について
- PHPプログラム初心者の方に向けて、テキストファイルから数字を読み取り計算する方法について解説します。
- テキストファイルから数字を読み取り、指定したキーワードに対応する数字を取得する方法を紹介します。
- ファイルの中に並んでいる文字と数字の間にはスペースがあり、指定したキーワードがあればその隣の数字を出力することができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
読み込んだ行データをスペースで分解すればいいのではないでしょうか? データが仕様どおりだと仮定していいのであれば(細かいエラー処理を省けば)、下記のように書けると思います。 <?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;
その他の回答 (2)
- shimix
- ベストアンサー率54% (865/1590)
ANo.1です。 >ここで、ユーザの入力に対して、 >「もじ」があれば 「もじ」のチェックを書き漏らしました(汗 #まぁ、$textをチェックして処理すればいいだけなので #簡単に組み込めるでしょう でも「あれば」というのが完全一致なのか部分一致でも含めるのか仕様として明確にしておかないといけません(普通は部分一致だと解釈してstrposあたりでチェックしますね)。 (蛇足) 「ユーザーの入力に対して」という意味ががわかりません。入力($_POSTや$_GET)が見当たらないのですが・・・。テキストファイルのデータが「ユーザーの入力を保存したもの」という意味で書かれたのでしょうか?
お礼
ありがとうございます。参考になりました。
補足
ありがとうございます。わざわざ時間を割いていただき、とても感謝しています。 ユーザの入力に対してというのは、 テキストボックスに書いてもらった文字を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)
少し手を抜いて <?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; ?>
お礼
ありがとうございます。参考になりました。
お礼
ありがとうございます。参考になりました。