Ceci ci-dessous traverse les fichiers dans un répertoire, les lit et les enregistre dans des fichiers de 500 lignes max. un nouveau répertoire. Cela fonctionne très bien pour moi (merci Daniel), mais j'ai besoin d'une modification. Je souhaite enregistrer dans des fichiers alpha-numériques.PHP - trier les lignes alpha de plusieurs fichiers dans un répertoire et les enregistrer dans les fichiers de "x" max dans les dossiers alpha nommés
Tout d'abord, trier le tableau alpha numériquement (déjà en minuscules) serait la première étape que je suppose. Saisissez toutes les lignes dans chaque $ incoming. "/. Txt" qui commence par "a" et placez-les dans un dossier à $ save500. "/ A" mais un maximum de 500 lignes chacune. (Je suppose qu'il vaudrait mieux commencer par le premier en haut du tri donc "0" pas "a" non?)
Toutes les lignes commençant par un nombre, allez dans $ save500. "/ num ".
Aucune des lignes ne commencera avec autre chose que a-z0-9.
Cela me permettra de rechercher mes fichiers pour une correspondance plus efficace en utilisant cette méthode flatfile. Réduire à un dossier.
$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++;
}
Chaque ligne doit toujours contenir au maximum 500 lignes.
Je vais passer à mysql plus tard. Cela fait seulement quelques mois maintenant.
Comme si cela ne suffisait pas. J'ai même pensé à enlever les deux premiers caractères. Faire des répertoires avec des subs a/0 à z/z!
Peut être la mauvaise approche ci-dessus depuis aucune réponse.
Mais je veux un mot comme aardvark enregistré dans le 1.txt le dossier a/a (en annexe). Sauf si 1.txt a 500 lignes, enregistrez-le dans un/2.txt. Donc, xenia serait ajouté au fichier 1.txt du dossier x/e à moins qu'il y ait 500 lignes, donc créez 2.txt et sauvegardez-le là.
Je serai alors en mesure de rechercher ces mots plus efficacement sans charger une tonne dans la mémoire ou en boucle à travers des fichiers/lignes qui ne contiendront pas de correspondance.
Merci à tous!
Voir ma réponse, je l'ai mis à jour. – sled