yesworld
@yesworld

Как разбить большой csv файл при помощи PHP?

Всем привет.

В общем есть огромный файл CSV размером 1,5Гб.
Который мне нужно распарьсить и написать для нее миграцию.
Я как обычно написал простой скрипт по обработке файла, но к сожаления шелл все время вешается.. = (

Суть вопроса, можно ли файл, как нибудь разбить, на отдельные CSV файлы? Примерно по 100МБ?
При этом нужно учитывать конец строки CSV?
  • Вопрос задан
  • 3965 просмотров
Решения вопроса 1
egor_nullptr
@egor_nullptr
split -C 100M file.csv
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@Fortop
Tech/Team lead
Учитывая, что csv - это чистые данные, по одной строке данных на строку, то решение -
split -l
Ответ написан
65536
@65536
вот могу дать напидореную функцию для чтения таблиц сохраненных в тхт с табами в экселе в винде

public function get_rows($file_path, $start = 0, $length = 0)
{
    $handle = fopen($file_path, 'r');

    $rows = array();
    $i = 0;

    while ( !feof($handle) )
    {
        $row = fgets($handle);

        if ( $i >= $start && $i < $start + $length )
        {
            $row = trim($row);

            if ( strlen($row) )
            {
                $cells = explode("\t", iconv('windows-1251', 'utf-8', $row));

                foreach ( $cells as $n => $cell )
                    if ( substr($cell, 0, 1) == '"' && substr($cell, -1) == '"' )
                        $cells[$n] = str_replace('""', '"', substr($cell, 1, strlen($cell) - 2));

                $rows[] = $cells;
            }
        }

        $i++;
    }

    fclose($handle);

    return $rows;
}


нужно организовать очередь и читать кусками такого размера чтобы их обработка влезала в память
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы