Discussion:
manipulation de fichier
(trop ancien pour répondre)
Rom1
2007-09-17 15:59:04 UTC
Permalink
Bonjour,

Je suis novice en PHP et je cherche à manipuler des fichiers.

J'ai un fichier "fichier.txt" composé de plusieurs lignes. Je
souhaiterais réussir à effectuer la chose suivante :

Si le premier caractère de la ligne est un "A" alors j'affiche le 10ème
caractère sur mon navigateur, sinon je passe à la ligne suivante.

Avec la fonction fgetc() j'arrive à récupérer mon premier caractère
mais je ne trouve pas la façon de faire pour que mon pointeur se
positionne sur le 10ème caractère.

J'espère être clair. Merci pour votre aide.
CrazyCat
2007-09-17 21:12:25 UTC
Permalink
Post by Rom1
Si le premier caractère de la ligne est un "A" alors j'affiche le 10ème
caractère sur mon navigateur, sinon je passe à la ligne suivante.
Avec la fonction fgetc() j'arrive à récupérer mon premier caractère
mais je ne trouve pas la façon de faire pour que mon pointeur se
positionne sur le 10ème caractère.
Je pense que tu ne trouveras pas la solution aussi simplement.

Tu peux utiliser fseek() pour te déplacer dans le fichier mais ce n'est
pas la manière la plus aisée (comptage du déplacement en octets).
A mon avis, si la ligne commence par un A, tu fais un fgets() pour
récupérer la ligne dans une variable (par exemple $ligne) et tu peux
récupérer $ligne{9} qui correspond au 10ème caractère.
--
Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu
Réseau IRC Francophone: http://www.crazy-irc.net
Philippe
2007-09-17 21:12:25 UTC
Permalink
Essaye avec la fonction fseek

http://fr.php.net/manual/fr/function.fseek.php
Post by Rom1
Bonjour,
Je suis novice en PHP et je cherche à manipuler des fichiers.
J'ai un fichier "fichier.txt" composé de plusieurs lignes. Je
Si le premier caractère de la ligne est un "A" alors j'affiche le 10ème
caractère sur mon navigateur, sinon je passe à la ligne suivante.
Avec la fonction fgetc() j'arrive à récupérer mon premier caractère
mais je ne trouve pas la façon de faire pour que mon pointeur se
positionne sur le 10ème caractère.
J'espère être clair. Merci pour votre aide.
Olivier Miakinen
2007-09-17 21:12:25 UTC
Permalink
Post by Rom1
Si le premier caractère de la ligne est un "A" alors j'affiche le 10ème
caractère sur mon navigateur, sinon je passe à la ligne suivante.
Avec la fonction fgetc() j'arrive à récupérer mon premier caractère
mais je ne trouve pas la façon de faire pour que mon pointeur se
positionne sur le 10ème caractère.
Ne pas utiliser fgetc(), à mon humble avis. Tu récupères chaque ligne
par fgets(), mettons $ligne, et ensuite si substr($ligne, 0, 1) vaut "A"
tu retournes substr($ligne, 9, 1) (pourvu que le résultat soit différent
de false, c'est-à-dire que la ligne contienne au moins 10 caractères).

Note qu'à la place de substr tu peux d'ailleurs utiliser $string{0} et
$string{9}.
Antoine Polatouche
2007-09-18 00:05:54 UTC
Permalink
Post by Olivier Miakinen
Note qu'à la place de substr tu peux d'ailleurs utiliser $string{0} et
$string{9}.
D'après la doc il vaut mieux utiliser $string[0] que $string{0}, pour
prendre les bonnes habitudes...

http://fr3.php.net/manual/fr/language.types.string.php
// Méthode alternative utilisant des {}, obsolète depuis PHP 6
Olivier Miakinen
2007-09-18 00:17:24 UTC
Permalink
Post by Antoine Polatouche
Post by Olivier Miakinen
Note qu'à la place de substr tu peux d'ailleurs utiliser $string{0} et
$string{9}.
D'après la doc il vaut mieux utiliser $string[0] que $string{0}, pour
prendre les bonnes habitudes...
http://fr3.php.net/manual/fr/language.types.string.php
// Méthode alternative utilisant des {}, obsolète depuis PHP 6
Tiens, pour une fois ce n'est pas que dans la doc en français qu'il y a
des incohérences.

http://fr.php.net/manual/fr/function.substr.php
// Accéder à un simple caractère dans une chaîne
// peut également être réalisé en utilisant des accolades
$string = 'abcdef';
echo $string{0}; // a
echo $string{3}; // d
echo $string{strlen($string)-1}; // f

http://fr.php.net/manual/en/function.substr.php
// Accessing single characters in a string
// can also be achived using "curly braces"
$string = 'abcdef';
echo $string{0}; // a
echo $string{3}; // d
echo $string{strlen($string)-1}; // f

Tu aurais le courage de signaler le fait (en anglais, probablement) ?
Antoine Polatouche
2007-09-18 07:55:18 UTC
Permalink
Post by Olivier Miakinen
echo $string{0}; // a
echo $string{3}; // d
echo $string{strlen($string)-1}; // f
Tu aurais le courage de signaler le fait (en anglais, probablement) ?
C'est déjà fait dans les commentaires:

Robert Chapin
26-Jun-2007 11:40
All the references to "curly braces" on this page appear to be obsolete.

According to http://us.php.net/manual/en/language.types.string.php

"Using square array-brackets is preferred because the {braces} style is
deprecated as of PHP 6."
Bruno Desthuilliers
2007-09-17 21:12:26 UTC
Permalink
Post by Rom1
Bonjour,
Je suis novice en PHP et je cherche à manipuler des fichiers.
J'ai un fichier "fichier.txt" composé de plusieurs lignes. Je
Si le premier caractère de la ligne est un "A" alors j'affiche le 10ème
caractère sur mon navigateur,
s/mon navigateur/la sortie standard/
Post by Rom1
sinon je passe à la ligne suivante.
Avec la fonction fgetc() j'arrive à récupérer mon premier caractère
mais je ne trouve pas la façon de faire pour que mon pointeur se
positionne sur le 10ème caractère.
Si tu tiens absolument à faire une lecture caractère par caractère, tu
peux toujours regarder du côté de fseek() et ftell().

Sinon, tu peux faire une lecture par ligne (avec fgets()), et accéder
directement aux premier et dixèmes caractères de la ligne avec la même
notation que pour un tableau:

$f = fopen('/chemin/vers/fichier.txt', 'r');
if (! is_resource($f)) {
die("oops");
}
$line = fgets($f);
while (! feof($f)) {
if ($line[0] == 'A') {
echo $line[9];
}
$line = fgets($f);
}
fclose($f);

(pas testé...)
Antoine Polatouche
2007-09-18 00:05:54 UTC
Permalink
Post by Rom1
Bonjour,
bonjour.
Post by Rom1
Je suis novice en PHP et je cherche à manipuler des fichiers.
J'ai un fichier "fichier.txt" composé de plusieurs lignes. Je
Si le premier caractère de la ligne est un "A" alors j'affiche le 10ème
caractère sur mon navigateur, sinon je passe à la ligne suivante.
Avec la fonction fgetc() j'arrive à récupérer mon premier caractère
mais je ne trouve pas la façon de faire pour que mon pointeur se
positionne sur le 10ème caractère.
Pour lire un fichier texte et le décomposer en lignes, la fonction
file() est très bien: elle retourne un tableau de lignes.

donc:
$lignes = file('fichier.txt');
foreach($lignes as $ligne)
{
if($ligne[0]=='A')
{
// Si moins de 10 caractères, $dixieme sera vide
$dixieme = $ligne[9];
// Faire ce qu'il faut de $dixieme
}
}
Rom1
2007-09-19 13:44:12 UTC
Permalink
Merci pour vos précieux renseignements. Il ne me reste plus qu'à les
mettre en pratique.
Post by Rom1
Bonjour,
Je suis novice en PHP et je cherche à manipuler des fichiers.
J'ai un fichier "fichier.txt" composé de plusieurs lignes. Je
Si le premier caractère de la ligne est un "A" alors j'affiche le 10ème
caractère sur mon navigateur, sinon je passe à la ligne suivante.
Avec la fonction fgetc() j'arrive à récupérer mon premier caractère
mais je ne trouve pas la façon de faire pour que mon pointeur se
positionne sur le 10ème caractère.
J'espère être clair. Merci pour votre aide.
Continuer la lecture sur narkive:
Loading...