Précision sur l'import d'un fichier texte avec file()
Posté : 02 nov. 2006, 16:59
Bonjour à tous
Je souhaiterais avoir des conseils pour optimiser un import de fichier texte.
Actuellemment j'ai un script qui repose sur la commande file() pour importer dans une table les données d'un fichier texte plat.
Du coup, importer mon fichier n'est plus possible compte tenu de la taille de mon fichier texte.
Je me demandais, si je pouvais contourner en important par bloc de 1000 lignes par exemple.
Simplement, je ne vois pas comment faire ca à à cchaque fois que je vois al commande file(), je vois la commande foreach qui importe toutes les lignes.
Y'a til un moyen de remplacer le foreach de manière à importer 1000 lignes. Et de faire une boucle pour commencer à la ligne 1 puis reprendre à la 1001 etc .. ?
Ou faut t'il que je travaille totalement différemment ?
Merci d'avance de vos recommandations
Je souhaiterais avoir des conseils pour optimiser un import de fichier texte.
Actuellemment j'ai un script qui repose sur la commande file() pour importer dans une table les données d'un fichier texte plat.
$content=file("source.txt");
foreach($content as $num=>$ligne)
{
$var1=substr($ligne,0,8);
$var2=substr($ligne,8,8);
$var3=substr($ligne,16,17);
$var4=substr($ligne,33,8);
$var5=addslashes(substr($ligne,41,128));
$var6=substr($ligne,169,8);
$var7=addslashes(substr($ligne,177,128));
$var8=addslashes(substr($ligne,305,32));
$var9=substr($ligne,337,5);
$var10=substr($ligne,342,32);
$var11=substr($ligne,374,3);
$var12=substr($ligne,377,11);
$var13=substr($ligne,507,1);
$var14=substr($ligne,508,1);
$requete = "INSERT INTO matable (c1, c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14) VALUES
('$var1','$var2','$var3','$var4','$var5','$var6','$var7','$var8','$var9','$var10','$var11','$var12','$var13','$var14')";
ExecRequete ($requete, $connexion);
}
Tout fonctionnait à merveille, cependant mon admin système a du (pour des raisons techniques autres) limiter les process mémoire. Du coup, importer mon fichier n'est plus possible compte tenu de la taille de mon fichier texte.
Je me demandais, si je pouvais contourner en important par bloc de 1000 lignes par exemple.
Simplement, je ne vois pas comment faire ca à à cchaque fois que je vois al commande file(), je vois la commande foreach qui importe toutes les lignes.
Y'a til un moyen de remplacer le foreach de manière à importer 1000 lignes. Et de faire une boucle pour commencer à la ligne 1 puis reprendre à la 1001 etc .. ?
Ou faut t'il que je travaille totalement différemment ?
Merci d'avance de vos recommandations