電子書籍の厳選無料作品が豊富!

こんにちは。PHPプログラム初心者です。
今回、実装したいのは、テキストファイルを読み込みます。
-----------------------
優れる:すぐれる 1
良い:よい 0.999995
喜ぶ:よろこぶ 0.999979
褒める:ほめる 0.999979
・・・
------------------------
といった内容のテキストファイルです。文字と数字の間には半角スペースがあります。
そして、入力した文字が「良い」であるとします。
その文字をテキストファイルの中にあるかどうか検索して、文字と数字をスペースで分割して、
0.999995を出力したいのです。
この作業を何回か繰り返し、最後に合計を出したいと思っています。
どうすればよいでしょうか。
よろしくお願い致します。

A 回答 (3件)

特にエラーが出ていないのであれば、テキストファイルの文字コードがプログラムの文字コードと同じか確認ですかね。



後半部分の所を以下のように変えてみて、テキストファイルから読み込んだ単語と$Keywordの値が一致しない理由を探しましょう。
以下のようにすると、テキストファイルから読み込んだ単語が順次出力されてきますので、まずは文字化けが無いかチェックして文字コードの確認。
後は区切り文字が間違っていて、単語をうまく展開できていないと言う事がないか確認ですね。

私の手元で確認した限りはちゃんと動きました。

$Keyword = '良い';
$Score = 0;
foreach ($WordList as $Value) {
foreach (explode(':', $Value['Word']) as $WordValue) {
var_dump($WordValue); // ココを追加
if ($WordValue == $Keyword) {
$Score += $Value['Score'];
}
}
}
    • good
    • 0
この回答へのお礼

ありがとうございます!
おそらく文字化けしてたんだと思います。
実行できました!ほんとうに感謝いたします。

お礼日時:2012/11/20 08:49
    • good
    • 0
この回答へのお礼

すみませんでした。

お礼日時:2012/11/20 11:05

$WordList = array();


if (($Hdl = fopen('list.txt', 'r')) !== FALSE) {
while (($LineData = fgets($Hdl)) !== FALSE) {
$WordData = explode(' ', $LineData, 2);
$WordList[] = array('Word' => $WordData[0], 'Score' => $WordData[1]);
}
fclose($Hdl);
}

$Keyword = '良い';
$Score = 0;
foreach ($WordList as $Value) {
foreach (explode(':', $Value['Word']) as $WordValue) {
if ($WordValue == $Keyword) {
$Score += $Value['Score'];
}
}
}

echo $Score;

この回答への補足

早速の回答有り難うございます。
とても参考になります。
このプログラムのテキストファイル名を当てはめて実行したのですが、
スコアが0から変わりません。
どこが動いていないと考えられるでしょうか・・。

補足日時:2012/11/19 16:25
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/11/20 11:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!