在数组中导入 csv,按给定的日期值或可能的 numrows 分解文本文件?
import csv in array's, explode text file by datevalue given or by numrows possible?
我有一个包含振动数据跟踪信号的 csv 文件。
它以 ISO 8601 日期 2017-01-31T16:16:21.000+01:00 开头
然后它有 1024 行数据(512Hz 2Sec 信号)。然后是下一个以新日期开始但在同一文件中的跟踪信号 -.-.
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..)
)
但我不知道如何遍历文件并按日期时间值展开并使用它。另一种方法是将第一行读取为时间,然后逐行读取接下来的 1024 行并推送它,但是如何?
随着数组变大,您可能 运行 会遇到问题,但这是方法:
$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 的倍数。如果是,那么你与时间在同一行,如果不是,那么就是数据。
我有一个包含振动数据跟踪信号的 csv 文件。
它以 ISO 8601 日期 2017-01-31T16:16:21.000+01:00 开头
然后它有 1024 行数据(512Hz 2Sec 信号)。然后是下一个以新日期开始但在同一文件中的跟踪信号 -.-.
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..)
)
但我不知道如何遍历文件并按日期时间值展开并使用它。另一种方法是将第一行读取为时间,然后逐行读取接下来的 1024 行并推送它,但是如何?
随着数组变大,您可能 运行 会遇到问题,但这是方法:
$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 的倍数。如果是,那么你与时间在同一行,如果不是,那么就是数据。