PHPの正規表現?&配列?の質問です。

下記のようなtest.txtがあります。

text.txtの内容

日時:2007年12月10日
名称:なんでも屋さん
住所:まるまる区
URL :http://www.nandemoyasan.com

そのtxtファイルを読み込んで配列に収めたいのです。
下記のようなコード(滅茶苦茶ですが)を書いてみたのですが、
うまく表示されません。。

<?
$fp = @fopen(./text.txt);
if($data){
list
list($day) = split("日時:", $date);
echo "日時は".$day."です。";
else{
echo "ファイルが存在しません。";
}
?>

希望している出力は下記の通りです。
--
日時は2007年12月10日です。
--
誰か教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/11/09 14:46:22
  • 終了:2007/11/16 14:50:08

回答(2件)

id:tezcello No.1

tezcello回答回数459ベストアンサー獲得回数692007/11/09 15:41:20

ポイント35pt

「配列に...」という事でしたので、一旦全てを配列に読み込んでみました。

$lines = file('test.txt');
if ($lines !== FALSE){
	foreach($lines as $line){
		list($key, $val) = split(':', $line);
		$ary[trim($key)] = trim($val);
	}
	print '日時は'.$ary['日時'].'です。';
}else{
	print "ファイルを開けませんでした";

ただし、

test.txt の文字コードはUTF-8(BOM無し)(多分EUCでも可)

PHPの言語、内部エンコードなどもそれに合わせる

をしておかないとダメかも。


ただ単に日時(あるいは別な項目)を抜き出したいだけなら、

$line = file_get_contents('test.txt');

if ($line !== FALSE){
	if (preg_match('/日時:(.*)/', $line, $res)){
		print '日時は'.$res[1].'です。';
	}else{
		print '日時の項目はありませんでした';
	}
}else{
	print "ファイルを開けませんでした";
}

こんな感じでしょうか。

http://jp2.php.net/manual/ja/function.preg-match.php

id:makotoworld

理想どおりです!

ありがとうございます!

日時:2007年12月10日

名称:なんでも屋さん

住所:まるまる区

URL :http://www.nandemoyasan.com

本文:なんでも屋さんをはじめました!!

いつでもあそびにきてください!!

なんでもやりますよ~!!

そのような場合は"本文:"の部分が"なんでも屋さんをはじめました!!"しか表示されないんですね。

以降の文章を表示するためにはどうすればいいでしょうか?

よろしくお願いします。

2007/11/09 16:51:25
id:shiroxcom No.2

しろっくす回答回数140ベストアンサー獲得回数52007/11/09 15:48:50

ポイント35pt

こんなんどうですか?読み込むだけならfile_get_contentsを使うと楽ですよ。

$f = file_get_contents("./text.txt");

$l = explode("\n",$f);

foreach($l as $val){

if(is_numeric(strpos("日時:",$val))){

$r = explode(":",$val);

$day = $r[1];

}

}

echo "日時は".$day."です";

?>

http://google.com

  • id:tezcello
    本文の中に改行文字があるとそうなってしまいます。
    これは、file() で読み込む時に改行文字を区切りとして配列に入れていくからです。

    これを避ける為には、本文中の改行文字が入らない様にして記録する必要があります。
    改行文字を別な物に置き換えてからファイルに書き出し、使う際にはまた元に戻すなどします。
    たとえば、
    本文:なんでも屋さんをはじめました!!<br>いつでもあそびにきてください!!<br>なんでもやりますよ~!!

    の様に記録しておけば、$ary['本文'] には全ての内容が入っているはずです。
    で、実際に表示する際は、
    $ary['本文'] = preg_replace('/<br>/', "¥n", $ary['本文']);
    のように改行文字に置き換えてから使う訳です。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません