Page 1 sur 2
exploitation fichier txt
Posté : 21 déc. 2006, 12:13
par Invité
Bonjour,
j'essaye d'exploiter un fichier txt avec php mais ça ne marche pas comme prévu. Je n'arrive pas à obtenir une ligne par enregistrement.
Quelqu'un sait il comment y parvenir?
Voici le fichier de données en 2 exemplaires:
sansretourchariot.txt
avecretourchariot.txt
Et le script que j'utilise. Je l'ai retourné dans tous les sens sans succès:
//On prend le contenu du fichier
$content=file_get_contents('monfichier.txt','r');
//On sépare par ligne
$content=explode("\n", $content);
//On sépare chaque ligne par colonne
for($i=0;$i<sizeof($content);$i++)
{
$content[$i] = explode("\t", $content[$i]);
}
//Affichage pour le test
print_r($content);
Merci par avance pour le coup de main.
Posté : 21 déc. 2006, 12:36
par Invité
Petite question liée: le fichier texte doit contenir plein de \r, \n et \t.
Ces caractères ne se voient pas à l'oeil nu.
Comment puis-je faire pour les afficher dans le texte avec php? ça pourrait m'aider à mieux comprendre comment le fichier est structuré et savoir où effectuer des traitments.
PS: chaque enregistrement(livres) contient 13 champs:
1- N° de l'ouvrage
2- Chapeau
3- Auteur
4- Pré-titre, titre, sous-titre
5- Editeurs, lieux et années d'édition
6- Date début d'édition
7- Date fin d'édition
8- Format et collection
9- Description exemplaire et reliure
10- prix
11- Notice bibliographique
12- thème
13- mots clefs
Posté : 21 déc. 2006, 13:03
par fgranjon
Tes fichiers data sont mal formatés.
il est difficile de distinguer les différentes entrées.
(j imagine que tu cherches à faire une entrée par bouqin)
si tu utilises linux et vi , tu peux faire un ":set list"
Posté : 21 déc. 2006, 13:48
par Invité
c'est quoi vi?
Posté : 21 déc. 2006, 14:04
par Ajoloca
Bonjour,
Comme te le dit fgranjon ton fichier n'est pas exploitable dans l'état.
Un enregistrement est sur plusieurs lignes.
Tu dois le prendre sous un éditeur de texte et faire en sorte que chaque ligne corresponde à un enregistrement.
Une fois ton fichier correctement formé utilise la fonction file() à la place de file_get_contents().
Elle te rend un tableau avec une ligne par poste du tableau.
Posté : 21 déc. 2006, 14:12
par Invité
Ok. Le problème est qu'il peut y avoir jusqu'à 1000 livres dans le fichier et je me vois mal traiter ça manuellement . 2 questions à ce sujet:
1-Existe-t-il un moyen de "corriger" le fichier avec un script php ou un logiciel sous windows?
2-Exisite-t-il un moyen d'afficher tous les caractères \n, \t et \r qui sont dans le fichier (avec les données), afin de voir clairement comment le fichier est organisé?
Posté : 21 déc. 2006, 14:21
par fgranjon
Déja ,je te conseil de télécharger l'éditeur "vim" ou "gvim" , il te permettra de voir les carractères de contrôle.
Ensuite je dirais non ton fichier n'est pas travaillable dans l'état .
On pourrais adopter une approche via les regexp en disant qu'une entrée corresponds à toutes nouvelles lignes qui commencent par plusieurs chiffres suivis de 2 tabulations.
Mais au vu de ton fichier ,ca risque de n'être pas vrai tout le temps .
Ce qui demande le moin de travail , c'est d'améliorer ton extraction et c'est la dessus que tu devrais te concentrer si tu en as la possibilité.
Aujourd hui ton fichier n'a aucune structure des "\t" un peu partout idem pour les "\n" on en retrouve dans les descriptions par exemple.
Dur de travailler avec un fichier de la sorte.
Posté : 21 déc. 2006, 14:31
par Invité
je viens d'installer gvim. Comment faire pour afficher les caractères spéciaux?
Posté : 21 déc. 2006, 14:32
par fgranjon
essaye de taper la séquence suivante:
[echap] : set list [enter]
Posté : 21 déc. 2006, 14:46
par Invité
ok, je vois des données séparées par ^I^I , et ^I.
Les fins de ligne sont séparées par $.
à quoi correspondent ces caractères en termes de \n, \t...
Posté : 21 déc. 2006, 14:47
par Invité
je veux dire :comment distinguer par exemple \n de \r?
Posté : 21 déc. 2006, 14:51
par fgranjon
Les ^I sont les \t et les $ sont les \n
Posté : 21 déc. 2006, 15:20
par Invité
c super, j'arrive à séparer chaque enregistrement en faisant
$content=explode("\t\t\n", $content);
Merci beaucoup pour votre patience.
Une dernière question sur les expressions régulières (auxquelles je ne comprends pas grand chose non plus...) .
Je voudrais analyser tous les \n du fichier, avec 2 cas:
1- Si \n est isolé, je le remplace par \t
2- Si \n se trouve dans la chaîne \t\t\n, je le conserve
avez vous une idée de coment rédiger ça en php?
Posté : 21 déc. 2006, 18:24
par Invité
j'ai fait ceci mais ça ne marche pas :
$content="............"; //variable qui contient le contenu initial de mon fichier txt. Dans ce fichier, je veux remplacer tous les \n par des \t
$n="\n"; // chaine à remplacer
$t="\t"; //chaine de remplacement
$ttn="\t\t\n"; //chaine à conserver
$zzz="\z\z\z"; //chaine pour masquer \t\t\n le temps de remplacer \n par \t
//je masque \t\t\n pour ne pas modifier pendant le traitement
str_replace($ttn , $zzz, $content);
//je remplace tous les \n par des \t
str_replace($n ,$t, $content);
//je remets les \z\z\z en \t\t\n
str_replace($zzz, $ttn, $content);
//je crée un fichier ou je mets le contenu pour le visualiser avec gvim
$fichier=fopen('fichier.txt','w+');
fputs($fichier, $content);
fclose($fichier);
Quand je visualise dans gvim après un set list, rien n'a changé.
Ou me suis-je trompé?
Posté : 21 déc. 2006, 18:48
par Invité
peut être que ce n'est pas possible d'agir sur les caractères de cette manière?