2011-04-17 32 views
1

得到一个文本文件中的行所以我知道如何打开一个PHP文件中使用如何使用CakePHP

fopen("file.txt", 'r') ; 

做,但我想要得到的文件在同一行等一些字符串操作上它。

我想找到与“服务这个”开头的行,并采取整条生产线将它添加到$线

然后我会删除“与< 0101010>服务这个”在<>并将其添加到$号码,同样为方法< 0101010>

名,可用于将只是完美

+0

'fopen'和你可能想要使用的其他函数,'strpos'和'substr'不是cakephp函数。 – mario 2011-04-17 17:43:15

+0

是否意味着你不能在Cakephp中使用它们? – msheshtawy 2011-04-17 17:44:35

+0

是的,你可以在CakePHP中使用它们。他们与CakePHP没有任何关系。这与这个问题无关,除非你真的想要一些古怪的CakePHP特定方法来搜索你的文本文件(?) – mario 2011-04-17 17:47:01

回答

2

好了,简单的方法,你可能要到u SE是:

foreach (file("file.txt") as $line) { 

    if (strpos($line, "Serving this with") === 0) { 

     print "found"; 

file函数比的fopen/FREAD更容易,因为它返回行的列表了。而strpos函数只是搜索字符串并返回位置。必须在这里检查=== 0,因为它也可以返回false

除了打印“发现”要提取的东西,所以你必须再次使用strpos找到你的定界符<>,然后提取与substr部分组成:

  $l = strpos($line, "<"); // well, actually needs more logic, 
     $r = strpos($line, ">"); // some if tests, if both are true 
     $wanthave = substr($line, $l, $r - $l + 1); 

一个简单的选择我会用正则表达式。而正则表达式本身看起来你的情况很简单:

preg_match_all('/^Serving this with <(\d+)>/m', 
       file_get_contens("file.txt"), 
       $matches); 
print_r($matches[1]); 
+0

非常感谢..我正在尝试它..但我有这个愚蠢的错误,我正在访问文件这种方式.... $ myfile = $ this-> webroot.'app'.DS。' webroot'.DS.'kannel'.DS.'receive.log“;它说它不存在。但它呢!你看到那条线上有什么错误!因为它有点让我疯狂! – msheshtawy 2011-04-17 19:26:55

+0

不知道。但是,也许你错过了webroot之后的第一个斜线。使用'DS'是没有意义的,因为'/'斜杠在每个plattform上都有效。 '$这 - >根目录 '/应用/根目录/ Kannel的/ receive.log'。 ' – mario 2011-04-17 19:45:10

+0

/应用程序自动添加之前。仍然当我改变“没有这样的文件”这真的很愚蠢! 是否有某种绝对路径方法。我查了一下,但我没有找到任何东西! – msheshtawy 2011-04-17 20:10:21

0

你也可以用fgets()一行读取文件中的行。

$line = fgets($file_handle);