如何使用php从txt文件中获取指定行的数据

时间:2017-10-30 06:41:24

标签: php

我有一个txt文件,其中包含有关特定日期的每小时风参数的数据,请参阅此文件的链接

http://dropcanvas.com/04o06

在这个第一个小时的数据,即00:00:00,来自第一行。我想要从第3行的日期和时间,从第5行的括号中的稳定性等级值以及从第12行的第5和第6列的风速和方向。我知道如何获取数据并以这种方式编码。

<?php

$file_handle = fopen("201017.dat", "r");
$line_no=0;
while (!feof($file_handle)) {
   $line = fgets($file_handle);
   $line_no++;
   if($line_no==3 ){
       $data=explode("\t",$line);
       $date=$data[0];
       $time=date('H:i:s',strtotime($data[1]));
       }

     if ($line_no==5 )   {

        preg_match('/(?<=\()(.+)(?=\))/is', $line, $match);

        $stability= $match[0];
        }
        if ($line_no==12 )   {

        $data=explode("\t",$line);

        $speed= $data[4];
        $dir= $data[5];
        }



}
$values[]="('$date', '$time',$dir,$speed,'$stability')";

现在我需要推送到数组的下一小时数据来自第一行。 31,33和40.我可以使用if .... else,如果对于整个24块数据我觉得这是一个繁琐的过程。有没有办法简化这一点,因为行号在算术级数上有一个共同的差异为28

1 个答案:

答案 0 :(得分:0)

$arr = file('201017.dat'); // read the whole file into array
/* NOTE! The whole file will be loaded into RAM,
so take into account ram restrictions for big files.
In this case 90kb is very small size */

$n = count($arr);

/* start with 2, because array indexes start with 0,
so the 3rd line will have index 2.
On the next interation $i will be 30 (that is 31th line,
$i+2 will be 33th line, $i+9 will be 40th line, etc.) */

for ($i = 2; $i < $n; $i += 28)  
{
  $data=explode("\t", $arr[$i]);
  $date=$data[0];
  $time=date('H:i:s',strtotime($data[1]));

  preg_match('/(?<=\()(.+)(?=\))/is', $arr[$i+2], $match); // i+2 gives 5th line
  $stability= $match[0];
  $data=explode("\t", $arr[$i+9]);
  $speed = $data[4];
  $dir = $data[5];
  $values[]="('$date', '$time',$dir,$speed,'$stability')";
} 

var_dump($values); 
/*
 Shows:
   [0]=>
   string(52) "('10/20/2017', '00:00:00',    220.00,      1.39,'D')"
   [1]=>
   string(52) "('10/20/2017', '01:00:00',    215.00,      0.15,'E')"
   [2]=>
   string(52) "('10/20/2017', '02:00:00',    199.00,      0.95,'D')"
   [3]=>
   string(52) "('10/20/2017', '03:00:00',    203.00,      1.03,'D')" 
   ..... etc.
 */