2012-07-19 68 views
0

我有這個文本文件閱讀文件和分裂與分隔符

acmst501:57:Runningacmst506:201:Runningacmst506:203:Runningacmst506:209:Runningacmst506:213:Failed 

,我想用分隔符分割。我有這個代碼工作。

<?php 
function parseFile($filename, $delimiter) { 
    global $splitcontents; 
    //$fd = fopen ($filename, "r"); 
    //$contents = fread ($fd,filesize ($filename)); 
    //fclose ($fd); 
    $contents = file_get_contents($filename); 
    $splitcontents = explode($delimiter, $contents); 
    return $splitcontents; 
} 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Read file and split with delimiter</title> 
</head> 

<body> 
<?php 
    parseFile("c:\emap\asrvr505-cslot_state.txt",":"); 
    foreach ($splitcontents as $value) { 
     echo "<b>$value<br>"; 
    } 
?> 
</body> 
</html> 

和輸出我得到的是這樣的:

acmst501 
57 
Running acmst506 
201 
Running acmst506 
203 
Running acmst506 
209 
Running acmst506 
213 
Failed 

不過,我想它是這樣的:

acmst501 
57 
Running 
acmst506 
201 
Running 
... 

所以基本上,我想在運行單獨的/失敗的部分來自acmst字段。

我該如何區分這些?另外,我的函數是否正確,以便可以將它用於同一個PHP文件中的不同文件?謝謝!

回答

1

此:

$fd = fopen ($filename, "r"); 
$contents = fread ($fd,filesize ($filename)); 
fclose ($fd); 

把整個緩衝區一次在$contents - 如果這是你的目標,你還不如用file_get_contents()

在你輸入你有:Runningacmst506。那裏沒有分隔符。我假設你正在拆分:,但在跑步附近沒有冒號。

您的示例輸入中是否有拼寫錯誤?

如果你澄清你的輸入,我可以給你一個更好的答案。

+0

嗨阿里爾。謝謝!是的,'Runningacmst506'之間沒有分隔符,但我需要將它們分開。好的是acmst部分是恆定的,只有數字被改變。另外,運行部分可能會更改爲失敗等。 – JudeJitsu 2012-07-19 01:42:05

+1

@JudeJitsu然後使用'explode()'和'acmst'作爲分隔符。你最終會得到只有數字,沒有單詞acmst,但你可以把它放回去。你也可以喜歡正則表達式,但我認爲對你來說,最好是寫一個循環。雖然如果你想半獨立使用帶有匿名函數的'array_map()', – Ariel 2012-07-19 01:50:13

+0

我已根據您的建議應用了'file_get_contents'。你的意思是我應該爆炸'$ splitcontents',因爲如果我這樣做的話,我會一直收到錯誤。關於'array_map()',我該怎麼做? – JudeJitsu 2012-07-19 01:54:01