exploitation fichier txt

Invité
Invité n'ayant pas de compte PHPfrance

21 déc. 2006, 12:13

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.

Invité
Invité n'ayant pas de compte PHPfrance

21 déc. 2006, 12:36

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

Eléphanteau du PHP | 32 Messages

21 déc. 2006, 13:03

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"

Invité
Invité n'ayant pas de compte PHPfrance

21 déc. 2006, 13:48

c'est quoi vi?

ViPHP
ViPHP | 1961 Messages

21 déc. 2006, 14:04

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.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Invité
Invité n'ayant pas de compte PHPfrance

21 déc. 2006, 14:12

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é?

Eléphanteau du PHP | 32 Messages

21 déc. 2006, 14:21

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.

Invité
Invité n'ayant pas de compte PHPfrance

21 déc. 2006, 14:31

je viens d'installer gvim. Comment faire pour afficher les caractères spéciaux?

Eléphanteau du PHP | 32 Messages

21 déc. 2006, 14:32

essaye de taper la séquence suivante:
[echap] : set list [enter]

Invité
Invité n'ayant pas de compte PHPfrance

21 déc. 2006, 14:46

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...

Invité
Invité n'ayant pas de compte PHPfrance

21 déc. 2006, 14:47

je veux dire :comment distinguer par exemple \n de \r?

Eléphanteau du PHP | 32 Messages

21 déc. 2006, 14:51

Les ^I sont les \t et les $ sont les \n

Invité
Invité n'ayant pas de compte PHPfrance

21 déc. 2006, 15:20

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?

Invité
Invité n'ayant pas de compte PHPfrance

21 déc. 2006, 18:24

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é?

Invité
Invité n'ayant pas de compte PHPfrance

21 déc. 2006, 18:48

peut être que ce n'est pas possible d'agir sur les caractères de cette manière?