2012-05-22 59 views
1

我正在寻找一种分割字符串并返回两个部分的非常有效的方法。如何在如此多字符PHP之后将字符串拆分为两位?

我需要分割的字符串长度为893,004个字符,字符串中的每一行长度为163个字符,我想在100行后分割它。

是从一个文件中使用正则表达式得到的字符串文件的快捷表示,

'/[a-z0-9]{40}/i' '/[a-z0-9]{40}/i' '/[a-z0-9]{40}/i' '/[a-z0-9]{40}/i' // 163 characters 
'/[a-z0-9]{40}/i' '/[a-z0-9]{40}/i' '/[a-z0-9]{40}/i' '/[a-z0-9]{40}/i' // 163 characters 
'/[a-z0-9]{40}/i' '/[a-z0-9]{40}/i' '/[a-z0-9]{40}/i' '/[a-z0-9]{40}/i' // 163 characters 

等等和洛尔,

我试图在后100线分割字符串,

// FILE CONTENTS 
$content = file_get_contents($file); 
// GET PARSER GXDE 
$split = preg_split('/^[a-z0-9\s]{16300}$/i', $content, 1); // REGEX DOESNT WORK 
var_dump($split[0]); 

我只是想在文件中的100行之后拆分字符串如何轻松完成?

+0

你可以用['preg_last_error'](http://nl3.php.net/preg_last_error)检查最后一个错误,我假设达到了一些限制。正则表达式不是去这里最有效的方法。 Treffynnon的建议似乎很恰当。 – Wrikken

+0

这听起来像是你想要处理大块文件:为什么不将[** split **](http://linux.die.net/man/1/split)文件转换成100个文件行呢? – salathe

回答

3

我只是使用file()来获取文件行作为数组或fgets()来逐行提取文件。这将允许您使用一个简单的计数器在适当的行数下打破文件。

+0

是的,我想到了这一点,但有时文件可能超过150万行,我真的不想迭代它太多,我需要提取数据的第一部分,并将其他部分重写回原始文件,如果有意义的话 – cgwebprojects

+1

无论是通过正则表达式还是通过fgets来完成,在这两种情况下,整个文件都必须被读取,检查,写入等。您不能“重写文件的一部分”。那么,除了个人喜好,还有其他什么原因,你不想'重复这么多'? – Wrikken

+0

从来没有想过这样的猜测,我只是想再次想到事情大声笑! – cgwebprojects

0

如果你不需要,你真的不应该使用正则表达式。正则表达式是一个相对昂贵的操作,如果你使用正则表达式来获得固定长度的字符串,这只是浪费处理。

目前还不清楚“100行后分割字符串”是什么意思。 the docs这个改编的例子将以100行块写出文件(如果所有行都是包括换行符的163个字符)。

$handle = @fopen("/inputfile.txt", "r"); 
if ($handle) { 
    $i = 0; 
    while (($buffer = fgets($handle, 163000)) !== false) { 
     $i++; 
     file_put_contents("chunk$i.txt", $buffer); 
    } 
    fclose($handle); 
} 
相关问题