外部ファイルがうまく配列に読みこめません - PHPプロ!Q&A掲示板

344

  • 1000P

外部ファイルがうまく配列に読みこめません

質問日時 / 2007年2月5日 14:38    回答数 / 2件

Questioner:  yumisaiki  このエントリーをはてなブックマークに追加 

キーワード / 正規表現    外部ファイルを読み込み    配列の加工   


http://www.phppro.jp/qa/341

で 配列から条件をつけて表示する方法を教えていただきました。
本格的に
配布されているケースケ
http://chankaz.net/php/script/p_sche.htm でできた データを使って

*その日の予定がある時は その日の予定。
*その日の予定がない時は その次の予定 
*今日も将来も予定がない時は 固定メッセージ

が表示されるようなプログラムを作ろうと思いました。

ところが、外部ファイルの例えば 
http://www.omosiro.ne.jp/schedule/data/200701.txt
の内容が…

  1. 12  午後 カウンセリング
  2. 13  キャッチの会・研修 13:00-15:00<br>委員会 15:30-17:30<br>箱庭 17:30-19:30
  3. 14  「私・発見」わたしって!13:00-14:30<br>(サンケイリビングカルチャー倶楽部 梅田ナビオ教室)
  4. 15  絵画療法研究会パートⅡ 13:00-15:00
  5. 18  自己開示 19:00-21:00
  6. 19  午後 カウンセリング
  7. 20  キャッチの会 初級 14:00-16:00<br>インストラクターコース 16:15-19:15
  8. 26  午後 カウンセリング
  9. 28  「私・発見」わたしって!13:00-14:30<br>(サンケイリビングカルチャー倶楽部 梅田ナビオ教室)

というようになっているからか、 うまく抜き出すことができません。

ちなみに私が書いたのは以下です。

  1. <?php
  2. $logdir  = "./data/"//データフォルダのパスを指定
  3. $year    = date("Y")//年
  4. $month   = date("m")//月
  5. $day     = date("d")//日
  6. $day2 = $year.$month.$day;
  7. $logpath = $logdir.$year.$month.".txt"//上のふたつを直結してログファイルのパス作成
  8. $day1 = $year.$month;
  9.  
  10. //===============================================
  11. //■表示処理
  12. //===============================================
  13.  
  14. //ファイルが存在する場合
  15. if (file_exists($logpath))
  16.  
  17.   {
  18. $lines = @file($logpath)//ファイルの中身を読み込み、配列として$linesに代入  
  19. }
  20.   //配列の行の中身を順々にチェックし、予定が今日以降の日付である場合表示する
  21.   foreach($lines as $value)  //$valueに各行の内容が入る

 ここで print_r($value); とすると 改行を(txtの中にあるため)まじえてすべてを一つに読み込んでいるようです。
 ちなみに $value[0] を指定すると 0111111222223 というような数字になります。

 で、無視して

  1. $line = explode("  ", $value); 
  2. print_r($line);

とすると
Array ( [0] => 30 [1] => 午後 カウンセリング )
 と最後の一行だけを認識して、ずらっと出てきません。

ということは、外部ファイルを配列に読むのが難しいようなのですが、これは正規表現のパターン抜き出しをしたらいいのではと思
いますが、
正規表現の方法がよくわかりません。
どなたか教えてください。
 
 


ツリー一覧

┗A01kouichi66こんな感じですか? >>CODE <?php $logdir = d
 ┗A01-1yumisaikiさっそくありがとうございます。 正規表現は "/^(

回答一覧

並び替え:

A01
answererkouichi66 [2月5日 16:45]

こんな感じですか?

  1. <?php 
  2. $logdir  = dirname(__FILE__).'/data/'//データフォルダのパスを指定 
  3. $year    = date("Y")//年 
  4. $month   = date("m")//月 
  5. $day     = date("d")//日 
  6. $day2 = $year.$month.$day
  7. $logpath = $logdir.$year.$month.".txt"//上のふたつを直結してログファイルのパス作成 
  8. $day1 = $year.$month
  9.   
  10. //=============================================== 
  11. //■表示処理 
  12. //=============================================== 
  13.  
  14. //ファイルが存在する場合 
  15. $contents = '';
  16. if (file_exists($logpath)) 
  17. {
  18.     $contents = file_get_contents($logpath);
  19. }
  20.  
  21. $matches = array();
  22. preg_match_all("/^(\S+)\s+(.*)/m",$contents$matchesPREG_SET_ORDER);
  23. var_dump($matches);
  24. ?>

この意見に回答する

ツリーへ TOPへ

A01-1
replyeryumisaiki [2月5日 17:27]

さっそくありがとうございます。

正規表現は "/^(\S+)\s+(.*)/m" の部分 が 日付+スペース+内容 だとわかり、なるほどこのように
書くのだと思いました。

しかし、出力してみましたが、
なんか よけいややこしくなるだけで、

二重に配列に入るだけのような感じですが、なんとかならないでしょうか?

そんな難しいことしたいわけじゃないのですが。

根本的に考え方を変えてみたいのですが、fget() 関数というのをやってみたのですが、
やはり、
日付:内容
line[0]:line[1]
セットに抜き出せないのです。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
動的なURLを静的に見せる方法
 このエントリーをはてなブックマークに追加 
A
普通に考えて、mod_rewrite でしょうね。 http://www.nishishi.com/blog/2006/01/mod_rewrite_url.html...

>>続きを読む

GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)