Как я могу разделить строку из файла CSV в особый формат в PHP? - PullRequest
1 голос
/ 26 марта 2012

У меня есть CSV-файл со следующими строками (например, 2):

004000001001030212001Y  5372 #0001 N,"1","2","3","4","5","5","0"

004000002001030212001Y  5372 #0001 N,"1","2","3","4","5","5","0"

Я хочу прочитать csv-файл в php, а затем переформатировать его следующим образом:

id   date              lp   Lang    token   cod1   cod2   cod3   cod4   cod5   cod6   cod7  

1    03/02/2012 18:00  2    el      grapto  1      2      3      4      5      5      0

2    03/02/2012 18:00  2    el      grapto  1      2      3      4      5      5      0

Идентификатором является 8 и 9-я цифра. Дата от 13 до 18 числа. А затем снова экспортируйте его в csv.

Подойдет любая помощь. Спасибо

Ответы [ 2 ]

1 голос
/ 26 марта 2012

Для таких вещей

есть fgetcsv

http://sg2.php.net/manual/en/function.fgetcsv.php

чтобы получить идентификатор и дату из этой длинной строки, которую вы могли бы сделать:

$id = substr($longString, 8, 2);
$dateStr = substr($longString, 13, 8);
$date = substr($dateStr, 0, 2) . '/' . substr($dateStr, 2, 2) . '/' . substr($dateStr, 4, 4);

А теперь иди и реализуй :)

0 голосов
/ 26 марта 2012

Не уверен, как вы получаете 18:00 2 el grapto от этих входов, но это будет делать другие вещи:

$lines = explode("\n", $file);
echo "id date Ip Lang token cod1 cod2 cod3 cod4 cod5 cod6 cod7\n";
foreach ($lines as $line)
{
    $values = explode(",", $line);
    $string = array_shift($values);

    $values = array_map(function($value) { return str_replace("\"", "", $value); }, $values);

    $id = substr($string, 7, 2);

    $date = date_parse_from_format("mdy", substr($string, 12, 6));
    $date = date("m/d/Y", mktime(0, 0, 0, $date["month"], $date["day"], $date["year"]));

    list(, $ip, $lang, $token) = explode(" ", $string);

    array_unshift($values, $id, $date, $ip, $lang, $token);

    echo implode(" ", $values) ."\n";
}

Выходы:

id date Ip Lang token cod1 cod2 cod3 cod4 cod5 cod6 cod7
01 03/02/2012 5372 #0001 N 1 2 3 4 5 5 0
02 03/02/2012 5372 #0001 N 1 2 3 4 5 5 0
...