2012-07-19 67 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