2017-02-06 19 views
-1

我有一個csv文件,其中包含振動數據的跟蹤信號。
它以ISO 8601開始日期2017-01-31T16:16:21.000 + 01:00 然後它有1024行數據(512Hz 2Sec信號)。然後是下一個跟蹤信號,它以新Date開始,但是在同一個文件中。在數組中導入csv,通過datevalue給出或numrows可能爆炸文本文件?

2017-01-31T16:16:21.000+01:00 
0,06;0,03;0,01 
0,07;0,03;0,01 
0,07;0,03;0,02 
.... up to line 1025 
2017-01-31T16:24:37.000+01:00 
1,72;0,2;-0,9 
1,48;0,39;-1,46 
1,23;0,58;-1,67 
0,99;0,76;-1,81 
... up to line 2050 

此文件可以包含超過2個痕跡得多了,我怎麼可以通過這分離式陣列?我寧願像這樣的數組:

Array 
    ( 
[0] => Array 
    (
[Time] => 2017-01-31T16:16:21.000 
[Data] => array ([0] => 0,06;0,03;0,01 
        [1] => 0,07;0,03;0,01 etc..) 
) 

但我不知道如何遍歷文件,並通過datetime值爆炸,也使用它。其他的方式是讀取Firstline作爲時間和接下來的1024行,並推動它,但如何?

+0

你熟悉[fgetcsv](http://php.net/manual/en/function.fgetcsv.php)的功能嗎? –

回答

1

你可能會遇到問題,因爲您的數組變得更大,但這是方法:通過文件和測試

$i = $j = 0; 

if($handle = fopen('/path/to/file.csv', 'r')) { 
    while(($line = fgets($handle)) !== false) { 
     if($i % 1025 === 0) { 
      $j++; 
      $result[$j]['Time'] = $line; 
     } else { 
      $result[$j]['Data'][] = $line; 
     } 
     $i++; 
    } 
} 

只是循環,如果它是第一行或一個是1026的倍數。如果是的話,那麼你的時間就是一條線,如果不是這樣的話。

+0

這有助於我,只是改變爲if($ i%1025 === 0){,這正是我想要的。萬分感謝 –