Ouvrir , lire un fichier, stocker ses données [Résolu/Fermé]

Signaler
Messages postés
15
Date d'inscription
lundi 23 juillet 2007
Statut
Membre
Dernière intervention
24 octobre 2007
-
Messages postés
15
Date d'inscription
lundi 23 juillet 2007
Statut
Membre
Dernière intervention
24 octobre 2007
-
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.

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
Messages postés
15
Date d'inscription
lundi 23 juillet 2007
Statut
Membre
Dernière intervention
24 octobre 2007

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.
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
Messages postés
15
Date d'inscription
lundi 23 juillet 2007
Statut
Membre
Dernière intervention
24 octobre 2007

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.
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
Messages postés
15
Date d'inscription
lundi 23 juillet 2007
Statut
Membre
Dernière intervention
24 octobre 2007

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);
?>
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
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
Messages postés
15
Date d'inscription
lundi 23 juillet 2007
Statut
Membre
Dernière intervention
24 octobre 2007

Slt Alain42.
J'avais eu un peu de contre temps.
Je tiens à te remercier pour ton apport à la résolution de mon problème.