Retourner sur PHPFrance


 FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres   Groupes d'utilisateursGroupes d'utilisateurs   Accéder aux archivesArchives  S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
PHPFrance est maintenu par des bénévoles et soutenu par les sociétés Actoo et Anaska, Conseil et Formation pour PHP
Pour optimiser vos chances commencez par consulter la FAQ et faites une recherche.
Bon esprit, politesse et entraide sont les règles de ce forum.

[Résolu] Lire un fichier texte à colonnes fixes

 
Poster un nouveau sujet   Répondre au sujet    PHPFrance Index du Forum -> PHP orienté Objet
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
mcorgnet
Eléphanteau


Inscrit le: 06 Oct 2005
Messages: 490
MessagePosté le: 28 Aoû 2008, 10:49    Sujet du message: Lire un fichier texte à colonnes fixes Répondre en citant

Bonjour,

J'ai un fichier texte à traiter, qui contient des colonnes fixes (en octets). En gros, quand une colonne fait 30 octets et que la valeur enregistrée dedans fait 8 octets, 22 octets sont remplis avec des espaces.

Donc, j'ai besoin de récupérer certaines colonnes dans ce fichier, et je ne sais absolument pas comment m'y prendre.


Extrait de quelques lignes du fichier :

Code:
1                        BAT 1                    HLM                Residence de l AU                                            SAP96240778                                          RDC                            1VILLAGE-NEUF 0      R3  026/07/200715:48:48      629      628        1m3                                                                                                                                                                                            0                 1l                           1                             0   0
1                        BAT 1                    HLM                Residence de l AU                                            SAP96240780                                          RDC                            2VILLAGE-NEUF 0      R3  026/07/200715:49:34      331      330        1m3                                                                                                                                                                                            0                 1l                           1                             0   0


Merci de votre aide.

(oups, je crois que j'ai posté dans le mauvais forum ...)
_________________
Ne jamais repousser à demain ce qu'on peut faire après demain ...
Voir le profil de l'utilisateur Envoyer un message privé
sadeq
Magohamoth


Inscrit le: 09 Fév 2005
Messages: 1772
Localisation: Le mans - France
Ce membre fait partie de l'équipe de modérationCe membre fait partie des ViPHP
MessagePosté le: 28 Aoû 2008, 11:37    Sujet du message: Répondre en citant

En utilisant les fonctions : fopen(), fread() et fclose() on peut lire un fichier texte. fread() peut lire dans une ligne du fichier un certain nombre d'octets, il suffit d'en préciser le nombre.

Ainsi, puisque tu connait les tailles des colonnes en octets, tu peux faire des fread() de tant d'octets pour chaque lecture de colonne.

Voici un exemple commenté:
PHP:
<?php
//Format d'une ligne (taille des colonnes fixes en octets)
$taille_col1 5//Colonne 1 de taille 5 octets
$taille_col2 20;
$taille_col3 10;

//Fichier à format fixe pour l'exemple
$contenu = <<<TEXT
1....BAT 1...............HLM.......
2....BAT 2...............XML.......
TEXT;
// Imaginez que les points .... sont des espaces

//Ecrire le fichier
file_put_contents("fichierFixe.txt"$contenu);

//Lire le fichier et exploiter les données (colonnes)
$f fopen("fichierFixe.txt""r");
while (! 
feof($f)) //Parcourir le fichier jusqu'à sa fin (feof = End Of File)
{
    
//lire les colonnes d'une ligne par taille
    
$col1 fread($f$taille_col1); 
    
$col2 fread($f$taille_col2);
    
$col3 fread($f$taille_col3);
    
$retour_chariot fread($f1); //La fin d'une ligne est marquée par 1 octet de retour chariot
    //afficher les données
    
echo sprintf("<p>Col1= %d, Col2= %s, Col3= %s</p>"trim($col1), trim($col2), trim($col3));
}
fclose($f);
?>

_________________
Prendre le recul n'est pas une perte de temps.
Formez-vous !
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail
mcorgnet
Eléphanteau


Inscrit le: 06 Oct 2005
Messages: 490
MessagePosté le: 28 Aoû 2008, 11:46    Sujet du message: Répondre en citant

C'est exactement ce que je cherchais.

Merci beaucoup de ton aide.
_________________
Ne jamais repousser à demain ce qu'on peut faire après demain ...
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    PHPFrance Index du Forum -> PHP orienté Objet Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum
Powered by phpBB © phpBB Group - PHPFrance est hébergé par Sivit