Преобразование большого файла со строками на маленькие можно выполнить с помощью PHP. Существует несколько подходов для решения этой задачи, и мы рассмотрим несколько из них.
1. Использование функции file():
$file = 'path/to/large_file.txt'; $lines = file($file, FILE_IGNORE_NEW_LINES); $count = 0; $batch_size = 1000; // Количество строк в каждой маленькой партии while ($count < count($lines)) { $batch = array_slice($lines, $count, $batch_size); // Сохраняем маленькую партию строк в отдельный файл file_put_contents("path/to/small_files/small_file{$count}.txt", implode(PHP_EOL, $batch)); $count += $batch_size; }
Этот код использует функцию file() для чтения всех строк из большого файла, игнорируя символы новой строки. Затем используется цикл while для разбиения массива строк на маленькие партии размером $batch_size. Каждая маленькая партия сохраняется в отдельный файл с уникальным именем.
2. Использование функции fopen() и fgets():
$file = 'path/to/large_file.txt'; $batch_size = 1000; // Количество строк в каждой маленькой партии $file_handle = fopen($file, 'r'); $count = 0; while (!feof($file_handle)) { $batch = []; for ($i = 0; $i < $batch_size; $i++) { $line = fgets($file_handle); if ($line === false) { break; } $batch[] = $line; } if (!empty($batch)) { // Сохраняем маленькую партию строк в отдельный файл file_put_contents("path/to/small_files/small_file{$count}.txt", implode('', $batch)); $count++; } } fclose($file_handle);
В этом примере мы используем функцию fopen() для открытия файла в режиме чтения и функцию fgets() для чтения строк по одной. Затем мы создаем новый файл для каждой маленькой партии строк, используя file_put_contents(). Как только мы прочитали все строки или достигли $batch_size, мы сохраняем текущую маленькую партию в файл.
3. Использование регулярных выражений:
$file = 'path/to/large_file.txt'; $batch_size = 1000; // Количество строк в каждой маленькой партии $file_string = file_get_contents($file); $pattern = '/(.*?n){1,' . $batch_size . '}/'; preg_match_all($pattern, $file_string, $matches); $count = 0; foreach ($matches[0] as $match) { // Сохраняем маленькую партию строк в отдельный файл file_put_contents("path/to/small_files/small_file{$count}.txt", $match); $count++; }
В этом примере мы считываем все содержимое большого файла в строку с помощью file_get_contents(). Затем мы используем регулярное выражение для разбиения строки на маленькие партии строк. Результат сохраняется в массив $matches[0], и мы проходимся по каждому элементу этого массива, сохраняя каждый элемент в отдельный файл.
Независимо от выбранного подхода, важно помнить о возможных ограничениях на размер памяти и использование ресурсов. Если большой файл очень большой, вам может потребоваться использовать другие методы обработки данных, такие как чтение блоками или использование буферов.