У меня есть CSV-файл, который содержит сигналы трассировки данных вибрации.
Начинается с даты ISO 8601 2017-01-31T16: 16: 21.000 + 01: 00
затем он имеет 1024 строки данных (512 Гц 2Sec Signal). И затем следующий сигнал трассировки, который начинается с новой даты, но в том же файле -.-.
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, а также использовать его. Другой способ состоял в том, чтобы прочитать «Первая строка как время» и следующие 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. Если это так, то вы находитесь на линии со временем, если нет, то это данные.
Других решений пока нет …