作者dinos (守护神)
看板PHP
标题Re: [请益] 读档取出资料(砍除文字档标记)
时间Sat Sep 22 16:16:05 2007
function checkNote($fn){
if(!file_exists($n))return false;
$returnData=array();
$fr=@fopen($fn,"r");
if(!$fr)return false;
while(($line=fgets($fr))!=false){
$line=trime($line,"\r\n");
/*** 略掉完全没有中文字及空白的行 ***/
if(preg_match('/^[0x00-0x8f]*$/',$line))continue;
/*** 略掉空白(\t\r\n\ )开头的行 ***/
else if(preg_match('/^\s+/',$line))continue;
/*** 略掉长度不足的行 ***/
else if(strlen($line)<6)continue;
/*** 如果要切割字串再处理这一段 ***/
/***
$line=preg_split('/[\s]{2,}/',$line);
***/
$returnData[]=$line;
}
fclose($fr);
return $returnData;
}
※ 引述《gpmm (银色)》之铭言:
: ※ 引述《OpenGoodHate (你今天开好恨了吗)》之铭言:
: : 原来 split 用空白分隔
: [苏珊]
: 写了一下,不确定你的需求,所以应该不完全合用
: function analysisText ($file) {
: if (file_exists ($file)) {
: $fp = fopen ($file, "r");
: $result = array ();
: while (!feof ($fp)) {
: $buffer = fgets ($fp, 4096);
: /*
: //资料行判定
: $preg = "";
: if (preg_match ($preg, $buffer))
: continue;
: */
: //资料切割方式
: $preg = "/( ){2,}/";
: $arr = preg_split ($preg, $buffer);
: array_push ($result, $arr);
: }
: return $result;
: }
: }
: 这样传回来的 array 是以每一行为单位,切割过的 array,
: 如果确定每行的第一组都是说明字串,那麽在使用上把他略过就可以了。
: 缺点是因为在後面做忽略,大笔档案会使变数肥大,
: 好的方式是在资料判定或资料切割方式那边决定,只是因为不清楚你的需求,
: 所以暂且这样写。
: 另,资料切割方式是切割超过两个的空白,换言之,
: "A B C D EF" 在切割过後是
: 1 123 12 123 (←此为空白数)
: Array (
: [0]=>A B
: [1]=>C D
: [2]=>E
: )
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.158.15