Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Retour a la ligne Windows/Linux

12 réponses
Avatar
korchkidu
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,
K.

10 réponses

1 2
Avatar
korchkidu
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.

Avatar
VANHULLEBUS Yvan
korchkidu writes:

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.

Avatar
Targeur fou
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 <stdio.h>
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

Avatar
Anthony Fleury
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

Avatar
Antoine Leca
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 (<stdio.h>, normalement) de
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

Avatar
Antoine Leca
In news:, VANHULLEBUS Yvan va escriure:
korchkidu writes:

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 ("
Avatar
Emmanuel Delahaye
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

Avatar
Emmanuel Delahaye
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

Avatar
korchkidu
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 <stdio.h>
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!

Avatar
korchkidu
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!

1 2