Это описано в файлах в каталоге, читает их и сохраняет в файлах с 500 строк max в новый каталог. Это отлично работает для меня (спасибо Даниэлю), но мне нужна модификация. Я хотел бы сохранить файлы, основанные на альфа-num.
Во-первых, сортировка массива alpha численно (уже строчная) будет первым шагом, который я предполагаю.
Возьмите все строки в каждом $ incoming. "/. Txt", которые начинаются с "a" и помещают их в папку с $ save500. "/ A", но не более 500 строк. (Думаю, было бы лучше начать с первого в начале сортировки, так что «0» не «а» правильно?)
Все строки, начинающиеся с числа, переходят в $ save500. "/ Num".
Ни одна из строк не начнется ни с чем, кроме a-z0-9.
Это позволит мне более эффективно искать мои файлы для сопоставления с использованием этого метода flatfile. Сужение его в одну папку.
$nextfile=0; if (glob("" . $incoming . "/*.txt") != false){ $nextfile = count(glob("" . $save500 . "/*.txt")); $nextfile++; } else{$nextfile = 1;} /**/ $files = glob($incoming."/*.txt"); $lines = array(); foreach($files as $file){ $lines = array_merge($lines, file($file, FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES)); } $lines = array_unique($lines); /*this would put them all in one file*/ /*file_put_contents($dirname."/done/allofthem.txt", implode("\n", $lines));*/ /*this breaks them into files of 500*/ foreach (array_chunk($lines, 500) as $chunk){ file_put_contents($save500 . "/" . $nextfile . ".txt", implode("\n", $chunk)); $nextfile++; }
Каждый из них должен быть не более 500 строк.
В дальнейшем я буду выпускником в mysql. Только делал это через пару месяцев.
Как будто этого недостаточно. Я даже подумал о том, чтобы снять первые два символа. Создание каталогов с subs a / 0 через z / z!
Возможно, неправильный подход выше, поскольку нет ответов.
Но я хочу, чтобы слово, подобное aardvark, было сохранено в файле 1.txt a / a (добавление). Если 1.txt имеет 500 строк, сохраните его в / a 2.txt.
Таким образом, xenia будет добавлена к файлу x / e folder 1.txt, если нет 500 строк, поэтому создайте 2.txt и сохраните его там.
Затем я смогу быстрее искать эти слова, не загружая тон в память или не зацикливая файлы / строки, которые не будут содержать совпадения.
Всем спасибо!
Я написал здесь какой-то код, который должен делать то, что вы ищете, это не красота исполнения, но он должен выполнять эту работу. Попробуйте в безопасной среде, не гарантируйте потери данных;)
Прокомментируйте, если есть какие-то ошибки, здесь довольно поздно;) Мне нужно немного поспать;)
ПРИМЕЧАНИЕ. Этот режим работает только в том случае, если каждая строка имеет не менее 2 символов! 😉
$nextfile=0; if (glob("" . $incoming . "/*.txt") != false){ $nextfile = count(glob("" . $save500 . "/*.txt")); $nextfile++; } else { $nextfile = 1; } $files = glob($incoming."/*.txt"); $lines = array(); foreach($files as $file){ $lines = array_merge($lines, file($file, FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES)); } $lines = array_unique($lines); /*this would put them all in one file*/ /*file_put_contents($dirname."/done/allofthem.txt", implode("\n", $lines));*/ /*this breaks them into files of 500*/ // sort array sort($lines); // outer grouping $groups = groupArray($lines, 0); $group_keys = array_keys($groups); foreach($group_keys as $cKey) { // inner grouping $groups[$cKey] = groupArray($groups[$cKey], 1); foreach($groups[$cKey] as $innerKey => $innerArray) { $nextfile = 1; foreach(array_chunk($innerArray, 500) as $chunk) { file_put_contents($save500 . "/" . $cKey . "/" . $innerKey . "/" . $nextfile . ".txt", implode("\n", $chunk)); $nextfile++; } } } function groupArray($data, $offset) { $grouped = array(); foreach($data as $cLine) { $key = substr($cLine, $offset, 1); if(!isset($grouped[$key])) { $grouped[$key] = array($cLine); } else { $grouped[$key][] = $cLine; } } return $grouped; }