Retour a la ligne Windows/Linux

Le
korchkidu
Salut,

il existe apparemment une difference entre les retours a ligne windows
() et linux (), c'est vraiment le cas?

Dans ce cas, si on doit tester un retour a la ligne de maniere portable,
comment faites-vous?

Merci,
K.

  • Partager ce contenu :
Vos réponses Page 1 / 2
Trier par : date / pertinence
korchkidu
Le #1018941
korchkidu wrote:

Salut,

il existe apparemment une difference entre les retours a ligne windows
(n) et linux (r), c'est vraiment le cas?

Dans ce cas, si on doit tester un retour a la ligne de maniere portable,
comment faites-vous?


Je precise que oui, je sais que l'on peut tester les 2 mais je doute
juste de cette histoire de difference entre les retours a la ligne
Windows/Linux d'ou ma question...

K.

VANHULLEBUS Yvan
Le #1018939
korchkidu
Salut,

il existe apparemment une difference entre les retours a ligne windows
(n) et linux (r), c'est vraiment le cas?


Oui, non: c'est n sous UNIX, et rn sous Windows (enfin, certains
outils sous windows ne sont pas perturbes par un n).


Dans ce cas, si on doit tester un retour a la ligne de maniere
portable, comment faites-vous?


Chercher [r]n....


Soit un n eventuellement precede d'un r.


A +

VANHU.

Targeur fou
Le #1018938
korchkidu wrote:
Salut,


Salut,

il existe apparemment une difference entre les retours a ligne windows
(n) et linux (r), c'est vraiment le cas?


Du point de vue C, 'n' sont tous deux des caractères de séquences
d'échappement. 'n' (new line, nouvelle ligne) permet d'aller à de la
position courante à la position initiale de la ligne suivante et 'r'
(carriage return, retour chariot) permet d'aller de la position
courante à la position initiale de la ligne courante (même ligne).

e.g:

#include int main(void)
{
printf("kaoc'h ki gwenn ha");
#ifdef NEWLINE
printf("n");/* On doit passer à la ligne suivante */
#else
printf("r"); /* On doit écraser la ligne, réécrire par dessus en
somme */
#endif
printf("kaoc'h ki du");
fflush(stdout);
return 0;
}

A ne pas confondre avec les caractères de contrôles qui permettent de
terminer une ligne sur les systèmes :
CR (Carriage Return) sous Mac
LF (Line Feed) sous Unix
CR + LF sous Windows

Le 'n' du C sur ces systèmes correspond au caractère de contrôle
correspondant ci-dessus. Quant au 'r', il correspond à ce qui permet
d'effectuer un retour chariot tel que le définit le C avec les
caractères de contrôles du système adéquats.

Dans ce cas, si on doit tester un retour a la ligne de maniere portable,
comment faites-vous?


Avec 'n'.

A+
Regis

Anthony Fleury
Le #1018937
Salut,


Salut,

il existe apparemment une difference entre les retours a ligne windows
(n) et linux (r), c'est vraiment le cas?


Il y a bien une différence entre les deux, mais pas celle-ci.
Les unix en général (dont linux) utilisent 'n', alors que Windows
utilise 'rn'. Il y a aussi mac os qui utilise (ou utilisait au moins)
'r'.

Dans ce cas, si on doit tester un retour a la ligne de maniere portable,
comment faites-vous?


Ca dépend... Tout ceci, c'est de la cuisine interne. En fait, le retour
chariot pour un fichier texte sera converti en la bonne valeur (mettre
'n' sous windows, le compilateur le transformera en 'rn' pour que la
fin de ligne soit bien faite.

Si c'est pour tester la fin de ligne sur un terminal, alors pas de
problème, on recherche n. De même lorsque l'on lit une ligne dans un
fichier, la fin de ligne, quelque soit l'OS, sera à ma connaissance
transformée en n si elle est conservée (comme avec fgets()). Le langage
C ne voit qu'un seul caractère de fin de ligne, qui est toujours 'n'.

Si c'est pour tester la fin de ligne dans des fichiers texte ouverts en
binaire, alors il faut rechercher différentes séquences, soit n, soit
rn, soit r soit nr (sur de très vieux systèmes il me semble que ca
a existé...). Mais de toute facon, à ma connaissance, sur un fichier
texte, rechercher la première occurence de r ou de n suffit amplement.
Ces deux caractères ne devraient apparaitre nul part autre.

--
Anthony Fleury

Antoine Leca
Le #925946
In news:43c235ef$, korchkidu va escriure:
il existe apparemment une difference entre les retours a ligne windows
(n) et linux (r), c'est vraiment le cas?


Non.
Dans les deux cas, n indique une fin de ligne (c'est ce que tu dois
utiliser) et r est un caractère de contrôle qui demande un retour en début
de ligne (utilisation très particulière, compliquée par le fait que ce
caractère peut changer de code entre les machines).


Dans ce cas, si on doit tester un retour a la ligne de maniere
portable, comment faites-vous?


Utilise n, partout et tout le temps.
Oublie r (sauf si tu veux faire de la surfrappe, et encore, c'est sûrement
mieux avec b).

Si tu trouves un cas où ce n'est pas le comportement que tu veux, tu vas
finir par être obligé de descendre d'un niveau et manipuler CR (15) et
LF/NL (12)... ce qui va forcément limiter la portabilité de ton programme,
ou alors le compliquer démesurement. Dans un cas comme cela, il est beaucoup
plus simple de demander à la couche inférieure ( faire le boulot, car elle dépend de la machine, donc va gérer correctement
les différents cas.
Bien sûr, cela suppose de manipler les FILE comme il faut, et donc en
particulier d'ouvrir avec le mode "b" les fichiers binaires, et sans "b" les
fichiers textes, et de ne PAS s'attendre à ce qu'ils soient identiques : un
fichier texte est constitué de lignes, terminées par n; un fichier binaire
est constitué de bytes.


Antoine

Antoine Leca
Le #925945
In news:, VANHULLEBUS Yvan va escriure:
korchkidu
Oui, non: c'est n sous UNIX, et rn sous Windows (enfin, certains
outils sous windows ne sont pas perturbes par un n).


Non. C'est n sur les deux. Simplement, avec Windows, n s'écrit normalement
CR+LF ("1512").


Antoine

Emmanuel Delahaye
Le #925592
il existe apparemment une difference entre les retours a ligne windows
(n) et linux (r), c'est vraiment le cas?


Possible.

Dans ce cas, si on doit tester un retour a la ligne de maniere portable,
comment faites-vous?


On ouvre le fichier en mode texte, et une fin de ligne se dit alors 'n'
en C quelque soit le système. Qui a dit que le langage C était un
langage de bas niveau !

--
A+

Emmanuel Delahaye

Emmanuel Delahaye
Le #925591
Chercher [r]n....

Soit un n eventuellement precede d'un r.


Tu as oublié de dire que pour faire ces manips contre nature, il faut
ouvrir en mode binaire... Si on ouvre en mode texte, on est portable (du
moins dans son mode). Si il faut inter-opérer, c'est une autre histoire.

--
A+

Emmanuel Delahaye

korchkidu
Le #925239
Targeur fou wrote:

Du point de vue C, 'n' sont tous deux des caractères de séquences
d'échappement. 'n' (new line, nouvelle ligne) permet d'aller à de la
position courante à la position initiale de la ligne suivante et 'r'
(carriage return, retour chariot) permet d'aller de la position
courante à la position initiale de la ligne courante (même ligne).

e.g:

#include int main(void)
{
printf("kaoc'h ki gwenn ha");
#ifdef NEWLINE
printf("n");/* On doit passer à la ligne suivante */
#else
printf("r"); /* On doit écraser la ligne, réécrire par dessus en
somme */
#endif
printf("kaoc'h ki du");
fflush(stdout);
return 0;
}


LOL.

Tres bonne reponse...;)
Je precise que ma grand-mere l'ecrit comme je l'ecris...;) Mais ce n'est
pas la langue sur-unifiee je pense..:;)

A+ et merci!

korchkidu
Le #925238
korchkidu wrote:

Salut,

il existe apparemment une difference entre les retours a ligne windows
(n) et linux (r), c'est vraiment le cas?

Dans ce cas, si on doit tester un retour a la ligne de maniere portable,
comment faites-vous?


Merci a tous pour vos reponses!

Poster une réponse
Anonyme