je suis une débutante en php et oracle. j'ai un fichier "toto.prt" qui est un tableau composé de plusieurs lignes et 5 colonnes. j'aimerais écrire un code qui puisse :
A- ouvrir et lire le fichier ligne par ligne;
B - en constituer un tableau (mais c'est seulement 3 colonnes qui m'intéressent) puis le stocker dans un fichier "toto_modife.prt";
C- scinder ce nouveau tableau en deux autres et les stocker dans les fichiers "toto_min1.prt" et "toto_min2.prt";
Voici ce que j'ai faire: mon code actuel ouvre le fichier, lit ligne par ligne et enregistre tout le contenu dans un fichier " titi.prt" qui n'est rien d'autre que la somme de "toto_min1.prt" et "toto_min2.prt".
<?
$fp = fopen("toto.prt", "r"); //lecture
if (!$fp = fopen("toto.prt", "r")) {
echo "Echec de l'ouverture du fichier";
exit;
} else {
$newfile = "titi.prt";
$fp_modifie = fopen($newfile,"w+"); //w+ pour lecture et ecriture, puis crée le fichier s'il n'existait pas.
while(!feof($fp)) // Tant que l'on n'est pas à la fin du fichier on continue de lire le fichier.
{
$contenu=fgets($fp,255);
//On stocke l'ensemble des lignes dans un nouveau fichier nommé : titi.prt
fputs($fp_modifie,$contenu);
}
}
fclose($fp); //On ferme le fichier
Utilises plutot la fonction file() , tu n'auras pas besion des f_open etc>> et qui te met le fichier directement dans un array ligne par ligne
$array_fich=file("toto.prt");
Ensuite je suppose que tes colonnes sont separees par un caractere particulier "-" par exemple
alors il va falloir que tu expode chaque ligne par rapport a ce caractere
foreach($array_fich as $cle =>$value){
$array_ligne=explode("-",$value);
ensuite tu ne prend que les trois premiers de cet array (vas voir les fonctions array_...... sur Google)
et tu Implode ces trois avec ton separateur "-"
et tu les empile dans un array modifie
}
et ensuite tu ecris ce nouvel array modifie dans ton fichier toto-mod
Merci Alain42.
Mes colonnes sont séparées par "3".
J'avoue que c'est un peu fort pour moi mais je vais m'y mettre (c-à-d apprendre à utiliser "explode", "foreach" et "array").
$nouv_array_fich=array();
foreach($array_fich as $cle =>$value){
$array_ligne=explode("3",$value);
$nouvelle_ligne=$array_ligne[0]."3".$array_ligne[1]."3".$array_ligne[2]; // on refait la ligne avec les 3 premieres col et le separateur
$nouv_array_fich[]=$nouvelle_ligne; // on empile les lignes dans le nouvel array
}
et apres tu ecris ce nouvel array dans ton fichier modifie
Merci Alain42 pour tout ce que tu as déjà fait pour moi.
Avec ton aide, voici ce que j'ai constitué (qui ne marche pas encore très bien car il écrit "array" dans mon nouveau fichier).
<?
$array_fich=file("toto.prt");
$nouv_array_fich=array();
foreach($array_fich as $value){
$array_ligne=explode("³",$value);
$nouvelle_ligne=$array_ligne[0]."³".$array_ligne[1]."³".$array_ligne[2]; // on refait la ligne avec les 3 premieres col et le separateur
$nouv_array_fich[]=$nouvelle_ligne; // on empile les lignes dans le nouvel array
}
//et apres on écrit ce nouvel array dans le fichier modifié.
$newfile = fopen("toto_mod.prt","w+");
//fputs($newfile,$nouv_array_fich[$nouvelle_ligne]);
fputs($newfile,$nouv_array_fich);
?>
Je sais que c'est trop te demandé mais je n'ai pas le choix car depuis des heures j'essaie mais en vain. STP Alain42.
Je veux même t'envoyer mon fichier "toto.prt" mais je ne sais comment le joindre.
Tu dois faire une boucle pour ecrire ligne par ligne l'array dans ton fichier:
//et apres on écrit ce nouvel array dans le fichier modifié.
$newfile = fopen("toto_mod.prt","w+");
foreach($nouv_array_fich as $ligne){
fputs($newfile,$ligne);
}
fclose($newfile);
je n'ai pas teste, je suis loin de chez moi (tres loin) Si erreur excuse par le decalage horaire et un clavier qwerty sur un Mac
Merci Alain42. ça marche: j'ai sous forme de tableau, les colonnes que je veux avec le séparateur.
MAIS je dois revoir la mise en forme de mon nouveau fichier "toto_mod" car les lignes vides sont représentées par des séparateurs "³".
Mon fichier initial "toto" est ceci:
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ Service LISTE DES EMPLOYERS ³
³ Comptabilit, ³ Imprimée le 12/10/07 ³
³ ³
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
$nouvelle_ligne="³".$array_ligne[2]."³".$array_ligne[4].'³'."\n"; // on refait la ligne avec les collonnes 2 et 4 qui nous intéressent et le separateur '³'.
$nouv_array_fich[]=$nouvelle_ligne; // on empile les lignes dans le nouvel array.
//On fait une boucle pour ecrire ligne par ligne le nouvel array dans le fichier "toto_mod.prt"
$newfile = fopen("toto_mod.prt","w+");
foreach($nouv_array_fich as $nouvelle_ligne){
fputs($newfile,$nouvelle_ligne); //NOTE: LE RESULTAT EST BIEN SOUS FORME DE TABLEAU MAIS RESTE A REVOIR LA MISE EN FORME.
}
}
fclose($newfile);
?>
Alors il faut tester et supprimer les lignes vides
<?
$array_fich=file("toto.prt");
$nouv_array_fich=array();
foreach($array_fich as $value){
$array_ligne=explode("³",$value);
if($array_ligne[2]!=""){
// si la colonne 3 n'est pas vide par exemple
$nouvelle_ligne="³".$array_ligne[2]."³".$array_ligne[4].'³'."\n"; // on refait la ligne avec les collonnes 2 et 4 qui nous intéressent et le separateur '³'.
$nouv_array_fich[]=$nouvelle_ligne; // on empile les lignes dans le nouvel array.
}
//On fait une boucle pour ecrire ligne par ligne le nouvel array dans le fichier "toto_mod.prt"
$newfile = fopen("toto_mod.prt","w+");
foreach($nouv_array_fich as $nouvelle_ligne){
fputs($newfile,$nouvelle_ligne); //NOTE: LE RESULTAT EST BIEN SOUS FORME DE TABLEAU MAIS RESTE A REVOIR LA MISE EN FORME.
}
fclose($newfile);
?>
attention tu avais une ] pas au bon endroit il me semble, mais je n'ai pas d'editeur pour bien voir