我有一个包含许多行的文件,例如:
2011-03-23 10:11:08 34 57 2 25,5 -
2011-03-23 10:11:12 67 54 3 3,5 -
2011-03-23 10:11:16 76 57 3 2,4 -
2011-03-23 10:11:18 39 41 2 25,5 +
每行以+
或-
结尾。我希望在+
或-
签名后拆分文件内容。行没有相同的字符数。
我尝试使用fgets()
开启auto_detect_line_endings
来阅读该文件,但仍有许多行合并为一行:
输出示例: 输出应该是两行,但只有一行(你可以看到“新行”,但PHP没有):
2011-03-23 10:11:08 34 57 2 25,5 -
2011-03-23 10:11:12 67 54 3 3,5 -
修改:
我用来读取文件的代码
ini_set('auto_detect_line_endings', true);
$handle = fopen($filename, "r");
$index = 1;
if ($handle) {
while (($line = fgets($handle)) !== false) {
if (trim($line) != '') {
$data = preg_split('/\s+/', trim($line));
// Saving into DB...
$index++;
}
}
}
fclose($handle);
答案 0 :(得分:2)
为了确保获得所有可能的new line combinations,您应该使用preg_split
代替:
LF
=\n
,CR
=\r
LF
:Multics,Unix和类Unix系统(GNU / Linux,OS X,FreeBSD,AIX,Xenix等),BeOS,Amiga,RISC OS等。
CR
:Commodore 8位机器,Acorn BBC,ZX Spectrum,TRS-80,Apple II系列,Mac OS,最高版本9和OS-9
LF+CR
:Acorn BBC和RISC OS假脱机文本输出CR+LF
:Microsoft Windows,DEC TOPS-10,RT-11和大多数其他早期的非Unix和非IBM操作系统,CP / M,MP / M,DOS(MS-DOS,PC DOS等) ,Atari TOS,OS / 2,Symbian OS,Palm OS,Amstrad CPC
正则表达式为/(\r\n|\n\r|\n|\r)/
(CR+LF
或LF+CR
或LF
或CR
):
$lines = preg_split('/(\r\n|\n\r|\n|\r)/', $string);
如果您打算没有任何空行(空格数为空的行),您可以在正则表达式的末尾添加一个可选的\s*
,它将匹配0到无限量的空格后换行符:
$lines = preg_split('/(\r\n|\n\r|\n|\r)\s*/', $string);
如果你打算没有任何空行,但是希望不的空白行计为空,你甚至可以简化正则表达式:
$lines = preg_split('/[\n\r]+/', $string);
答案 1 :(得分:1)
尝试:
<?php
$input = "2011-03-23 10:11:08 34 57 2 25,5 -
2011-03-23 10:11:12 67 54 3 3,5 -
2011-03-23 10:11:16 76 57 3 2,4 -
2011-03-23 10:11:18 39 41 2 25,5 +";
// 1st explode by new line
$output = explode("\n", $input);
print_r($output);
// 2nd remove last character
$result = array();
foreach($output as $op)
{
$result[] = substr($op, 0, -1);
}
print_r($result);
的输出:强>
Array
(
[0] => 2011-03-23 10:11:08 34 57 2 25,5 -
[1] => 2011-03-23 10:11:12 67 54 3 3,5 -
[2] => 2011-03-23 10:11:16 76 57 3 2,4 -
[3] => 2011-03-23 10:11:18 39 41 2 25,5 +
)
Array
(
[0] => 2011-03-23 10:11:08 34 57 2 25,5
[1] => 2011-03-23 10:11:12 67 54 3 3,5
[2] => 2011-03-23 10:11:16 76 57 3 2,4
[3] => 2011-03-23 10:11:18 39 41 2 25,5
)