Ouvrir , lire un fichier, stocker ses données

Résolu/Fermé
Ablawa Messages postés 15 Date d'inscription lundi 23 juillet 2007 Statut Membre Dernière intervention 24 octobre 2007 - 9 oct. 2007 à 21:46
Ablawa Messages postés 15 Date d'inscription lundi 23 juillet 2007 Statut Membre Dernière intervention 24 octobre 2007 - 19 oct. 2007 à 16:37
Bonjour à tous,


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

?>


Merci de donner un coups de pouce.
A voir également:

9 réponses

Salut,

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
0
Ablawa Messages postés 15 Date d'inscription lundi 23 juillet 2007 Statut Membre Dernière intervention 24 octobre 2007
10 oct. 2007 à 12:23
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").

A bientôt.
0
Salut,

je vais t'en donner un peu plus

$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
0
Ablawa Messages postés 15 Date d'inscription lundi 23 juillet 2007 Statut Membre Dernière intervention 24 octobre 2007
11 oct. 2007 à 13:36
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.

Merci d'avance.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
0
Ablawa Messages postés 15 Date d'inscription lundi 23 juillet 2007 Statut Membre Dernière intervention 24 octobre 2007
12 oct. 2007 à 14:43
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 ³
³ ³
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ


ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

³ NOM ³ PRENOM ³ AGE ³ SALAIRE ³
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ Nom1 ³ Jean1 ³ 34 ³ 500000 ³
³ Nom2 ³ Jean2 ³ 28 ³ 300000 ³
³ Nom3 ³ Jean3 ³ 37 ³ 250000 ³

ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Mon fichier final "toto_mod" est ceci:³³³
³³³
³ ³³
³ ³ Imprimée le 12/10/07 ³³
³ ³³
³³³
³³³
³³³
³³³
³³³
³ PRENOM ³ SALAIRE ³
³³³
³ Jean1 ³ 500000 ³
³ Jean2 ³ 300000 ³
³ Jean3 ³ 250000 ³
³³³
³³³
³³³



Voici le code final:

<?
$array_fich=file("toto.prt");

$nouv_array_fich=array();

foreach($array_fich as $value){

$array_ligne=explode("³",$value);

$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);
?>
0
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
0
En complement a mon post precedent,

Attention il faut que tu refermes ta boucle foreach de generation de array }

avant ta boucle foreach d'ecriture de l'array dans le fichier mod

dans ton code tu as les deux }} a la fin alors tu ecris dans le fichier mod a chaque passage de la premiere boucle ce qui n'est pas bon.

Ensuite un conseil utilises les tags <?php ?> au lieu des shorts tags <? ?> cela t'evitera bien des deboires si tu passes un jour en php5

@lain
0
Ablawa Messages postés 15 Date d'inscription lundi 23 juillet 2007 Statut Membre Dernière intervention 24 octobre 2007
19 oct. 2007 à 16:37
Slt Alain42.
J'avais eu un peu de contre temps.
Je tiens à te remercier pour ton apport à la résolution de mon problème.
0