我试图从txt文件中读取数据到php,我已经能够做到这一点,但现在它有点不同了。 数据文件由以下行组成:
10.09.16 0:05 16.7 16.8 16.7 70 11.2 3.2 ENE 0.27 6.4 ENE 16.7 16.4 16.4 --- 946.9 0.00 0.0 0 0.00 0 0.0 0.00 0.0 0.006 0.000 19.8 44 7.2 18.7 8.35 1.1146 15.6 0.00 112 2 100.0 5
10.09.16 0:10 16.7 16.8 16.7 70 11.2 4.8 E 0.40 6.4 E 16.7 16.4 16.4 --- 946.8 0.00 0.0 0 0.00 0 0.0 0.00 0.0 0.006 0.000 19.7 43 6.8 18.6 8.25 1.1151 15.6 0.00 115 2 100.0 5
如您所见,列之间的隔离并不总是相同,不是每列都有,甚至不是行之间。
现在我必须从某些特定列中获取数据。 有人可以帮我弄这个吗? 谢谢!
答案 0 :(得分:0)
您可以逐行读取文件,然后只用一个空格(或其他分隔符)替换所有空格。
然后用分隔符爆炸线以获得每列的数组。
您可以使用的资源:
读取文件:check this answer
使用explode
此外,您可以用;
替换空格并使用fgetcsv
答案 1 :(得分:0)
在匹配和分离文本序列时,正则表达式非常强大:
如果您事先不知道列数,可以采用简单的方法:
<?php
$input = <<<EOT
10.09.16 0:05 16.7 16.8 16.7 70 11.2 3.2 ENE 0.27 6.4 ENE 16.7 16.4 16.4 --- 946.9 0.00 0.0 0 0.00 0 0.0 0.00 0.0 0.006 0.000
10.09.16 0:10 16.7 16.8 16.7 70 11.2 4.8 E 0.40 6.4 E 16.7 16.4 16.4 --- 946.8 0.00 0.0 0 0.00 0 0.0 0.00 0.0 0.006 0.000
EOT;
$output = [];
foreach(explode("\n", $input) as $subject) {
if (trim($subject)) {
preg_match_all('/(?:([^\s]+)\s+)+/uU', $subject, $tokens);
$output[] = $tokens[1];
}
}
var_dump($output);
如果你做预先知道列数,那就更优雅了:
<?php
$input = <<<EOT
10.09.16 0:05 16.7 16.8 16.7 70 11.2 3.2 ENE 0.27 6.4 ENE 16.7 16.4 16.4 --- 946.9 0.00 0.0 0 0.00 0 0.0 0.00 0.0 0.006 0.000
10.09.16 0:10 16.7 16.8 16.7 70 11.2 4.8 E 0.40 6.4 E 16.7 16.4 16.4 --- 946.8 0.00 0.0 0 0.00 0 0.0 0.00 0.0 0.006 0.000
EOT;
preg_match_all('/(?:([^\s]+)\s+)+/uUm', $input, $output);
$output = array_chunk($output[1], 39);
var_dump($output);
我声明输入文本内联以降低复杂性,您可以从文件中读取它。
这两种方法仅产生相同的输出:
array(2) {
[0] =>
array(39) {
[0] =>
string(8) "10.09.16"
[1] =>
string(4) "0:05"
[2] =>
...
[37] =>
string(5) "100.0"
[38] =>
string(1) "5"
}
[1] =>
array(39) {
[0] =>
string(8) "10.09.16"
[1] =>
string(4) "0:10"
[2] =>
...
[37] =>
string(5) "100.0"
[38] =>
string(1) "5"
}
}