Pointeur interne de fichier, et position gauche et droite.

ViPHP
ViPHP | 4674 Messages

28 avr. 2008, 19:33

Hey :),

Ça fait longtemps que j'ai pas ouvert un sujet tiens.
Je me remettais un peu sur les pointeurs de fichier en PHP (les positions à partir de laquelle PHP doit écrire). Pour mémoire, on parle avec les constantes SEEK_CUR, SEEK_END, et SEEK_SET, respectivement pour la position courante, la position de fin du fichier, et la position définie via la variable whence. Enfin bref, je vais pas refaire un cours hein, je m'adresse à ceux qui savent ;-).

Donc voilà. Une fois que l'on a une position pour le pointeur, on peut aussi parler de position par rapport aux caractères. Soit on est à droite du caractère, soit on est gauche du caractère (notion très forte dans vi par exemple : commande a ou i ?). Et dans PHP, ça m'a l'air d'être gérer comme un patate. Exemple :
$fp = fopen('fichier', 'rb');
// On remet le pointeur au début, même s'il l'est par défaut.
fseek($fp, 0, SEEK_SET);

// On lit le premier caractère.
echo fread($fp, 1);
Donc ici, on est position gauche, et on lit de 1 vers la droite. Donc on a sélectionné le premier caractère. Et on se retrouve en position gauche du second caractère.

Maintenant, on essaye ceci :
// On se place à la fin du fichier.
fseek($fp, 0, SEEK_END);

// Et on lit un caractère.
echo fread($fp, 1);
Ne marchera pas. Pourquoi ? Car cette fois, fseek s'est mis en position droite. Si on veut lire le dernier caractère, il faut faire :
fseek($fp, -1, SEEK_END);
echo fread($fp, 1);
On pourrait penser que c'est logique, mais en fait pas du tout. Et c'est encore moins rigoureux. Dans le premier exemple, on est en position gauche du caractère :

Code : Tout sélectionner

|Notre fichier.
Dans le seconde exemple, on est en position droite :

Code : Tout sélectionner

Notre fichier.|
Dans le dernier exemple, on est en position droite :

Code : Tout sélectionner

Notre fichier|.
Alors que dans le second exemple on devrait être en position gauche :

Code : Tout sélectionner

Notre fichier|.
La seule explication que j'ai trouvé est qu'il se place sur le caractère de fin de fichier, et donc il serait en effet à gauche du caractère, mais ce serait un peu bête là ...
Si quelqu'un a compris ma question, est-ce qu'il peut m'expliquer ce comportement étrange ?

D'après mes souvenirs, ce comportement est le même en C, ce qu'il me laisse penser qu'il travaille avec le caractère de fin de fichier (EOL). Il a quelle forme déjà ?

Merci :).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

x@v
Mammouth du PHP | 570 Messages

28 avr. 2008, 21:11

dans vim l'option
-A

Code : Tout sélectionner

-A Si Vim a été compilé avec le support de la fonctionnalité ARABIC pour l’édition de fichiers de droite à gauche et les claviers arabes, cette option lance Vim en mode Arabe, c.-à-d. que l’option ’arabic’ est activée. Sinon, un mes‐ sage d’erreur est émis et Vim quitte.
permet d'écrire à l'envers comme les arabes
pour -i

Code : Tout sélectionner

-i {viminfo} Lorsque l’utilisation d’un fichier viminfo est activée, cette option indique le nom de fichier à utiliser à la place de "~/.viminfo" par défaut. Il est possible d’empêcher l’utilisation d’un fichier ".viminfo", en spécifiant le nom de fichier "NONE".
Tiens sa programme avec vi (le méchant programme) !
je troll, je sais je suis méchant, méa culpa

ViPHP
ViPHP | 4674 Messages

28 avr. 2008, 21:17

Aucun rapport avec mon sujet. Je connais évidemment les commandes a et i, j'utilise vim tous les jours ... Relis les questions.
Je donnais l'exemple de a et i pour les insertions à droite et à gauche d'un caractère.
Edit : et je parlais des commandes pas des paramètres de la commande ...
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

29 avr. 2008, 10:16

Dans le dernier exemple le pointeur est en position gauche...
Et pour le second je dirais qu'il est en position gauche par rapport au "pointeur" de fin de fichier :)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

ViPHP
ViPHP | 4674 Messages

29 avr. 2008, 15:04

Dans le dernier exemple le pointeur est en position gauche...
Et pour le second je dirais qu'il est en position gauche par rapport au "pointeur" de fin de fichier :)
Pour le dernier exemple, il est en position droite car on est en -1. Il serait à gauche si on était à 0 (le tout par rapport à SEEK_END).
Donc tu penses comme moi pour le second, il est à gauche par rapport à la fin, donc ce serait par rapport au caractère de fin de fichier (EOL), non ?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).