0
2009 年 11 月 27 日星期五 10:00:01 EST 974 12506
2009 年 11 月 27 日星期五 11:00:01 EST 988 12655
2009 年 11 月 27 日星期五 12:00:01 EST 1005 12886
2009 年 11 月 27 日星期五 13:00:01 EST 1026 13115
2009 年 11 月 27 日星期五 14:00:01 EST 1042 13429

我尝试在 \n 上爆炸,然后在 \t 上爆炸,但文件中似乎没有标签...

4

4 回答 4

3

这将在所有空白集合中拆分,无论大小。

$lines = file($myfile);
foreach ($lines as $line) {
    $line = preg_split('/\s+/', $line);
    # do stuff with line
}
于 2009-12-16T20:59:01.410 回答
1
$lines = explode("\r\n", $str);

foreach( $lines as $line){

回声'日期='。substr($line, 0, 28)。PHP_EOL;
回声'var1 ='。substr($line, 28, 12)。PHP_EOL;
回声'var2 ='。substr($line, 40, 12)。PHP_EOL;
回声'
' ; }

如果可能,PHP 首先将所有传入的变量视为整数,因此如果文本文件的长度可预测(我可以看到 24、12、12 个字符),那么 0000000974 将被正确解析为整数 974 而无需求助修剪。

如果可以的话,最好避免使用正则表达式吗?

于 2009-12-16T21:44:36.267 回答
0

它似乎是固定的列宽。您将需要:

  • 使用 substr() 并提取每一列,然后修剪空白
  • 使用 preg_split() 并在一行中查找两个或多个空格 '/\s+/'
  • 其他

Explode 可能会返回一堆空元素,因为它只匹配单个字符/一个空格。

于 2009-12-16T21:01:06.523 回答
0
$line = "Fri Nov 27 10:00:01 EST 2009         974        12506";
preg_match_all('~\S+~', $line, $parts);
print_r($parts[0]);

剩下的取决于你

于 2009-12-16T21:01:23.563 回答