2017-10-30 7 views
0

を使用してのみ、txtファイルから指定した行からデータを取得するために、私は特定の日付の時間ごとの風のパラメータに関連するデータが含まれているtxtファイルを持っているファイルに対して、このリンクを参照してくださいどのようにPHP

http://dropcanvas.com/04o06

最初の1時間のデータ、すなわち00:00:00hrsはライン番号からのものです。 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')"; 

ここで、配列にプッシュする必要がある次の1時間のデータは、行番号からです。私が感じるデータの24ブロック全体が厄介な手続きであるならば、私は...を使うことができます。これを簡略化する方法はありますか?行番号は一般的な違いがある算術的な進展にあります。

答えて

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. 
*/ 
+0

非常にありがとう...ありがとう – mansoondreamz