こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

テキストファイルの指定文字列表示2

以前質問し、解決したかに見えたのですが、元ファイルに意外なケースがあることに気づき、再度質問させていただきます。

あるブラウザにて、あるテキストファイルの部分を抽出して表示させるスクリプトを考えております。
テキストファイル自体は同階層にあり(./aaa.txt)、不定期に更新されます。内容は下記<./aaa.txt>のような構成になっております。そして下段のphpスクリプト<vvv.php>ですと希望どおりに表示されるのですが、./aaa.txtファイルの中身は状況によっては空行が最初の1回しかないケースがあります。
その場合も、
222222222222
3333333333333 4444444444
のように"111111111111"を除いた、1回目の空行までは表示させたいのですが、何か良い方法はございますでしょうか?
※このようなファイルの場合<vvv.php>で実行すると、何も出力されません。
どうかご教授お願いいたします。

<./aaa.txt>
=========
111111111111
222222222222
3333333333333 4444444444
(空行)
55555555 6666666
66666666 8888888
(空行)
9999999999999999999999


=========

<vvv.php>
=========
<?PHP
function mytrim(&$item){//(1)
$item=str_replace(Array("\r","\n"),Array("",""),$item);
}

$lines=file("./aaa.txt");//(2)
array_walk($lines, 'mytrim');//(3)

$blankline=array_keys($lines,"");//(4)
$lastline=$blankline[1]-1;//(5)

for($i=0;$i<=$lastline;$i++){
if($lines[$i]!="111111111111"){//(6)
print $lines[$i]."<br>";
}
}
?>
=========

投稿日時 - 2006-09-30 03:49:23

QNo.2440855

困ってます

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

前の回答の時に説明したと思うのですが
$blanklineは空白行が出現する行数
$lastlineが読み出す最終行です。
(5)の行を以下のように書きかえれば良いでしょう。

$lastline=$blankline[(count($blankline)==1?0:1)]-1;//(5)

blanklineの要素数が1しかないときは0番要素
そうでないときは1番要素を抽出するわけです。

できればスクリプトを理解してこまかい修正くらい
できるようになっていただけると助かります

投稿日時 - 2006-09-30 12:00:08

お礼

すいません。焦っていて思わず理解を先送りにして質問してしまいました。
『配列$blanklineに空行の要素が幾つあるかを$lastline要素返すようにし、
1であれば0、1でなければ1を返すようにする』という流れで把握いたしました。

どうもありがとうございます。

投稿日時 - 2006-09-30 21:03:53

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

前の質問というのがどれかわからないので、何をやりたいのか今ひとつつかめません。
「最初に空行が現れるまで、"111111111111"以外の行を表示する」
ということですか?
前の質問のURLを貼り付けるか、要求仕様をもう少し正確に書いていただけませんか?

投稿日時 - 2006-09-30 07:50:55

補足

補正が遅れてしまい申し訳ございません。
最初に質問いたしましたURLは下記になります。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=2419589

投稿日時 - 2006-09-30 20:48:41

あなたにオススメの質問