Re: remplacer les sauts de ligne : les $ par ^M$ dans le fic…

Page principale

Répondre à ce message
Auteur: anne.guilde@free.fr
Date:  
À: guilde
Sujet: Re: remplacer les sauts de ligne : les $ par ^M$ dans le fichier
Le 26/01/2020 à 22:26, Edgar Bonet a écrit :
> Bonsoir !
>
> Anne a écrit :
>> cat -A teledir-boule.vcf > cat-teledir-boule => fichier origine qui a
>> des ^M$
>
> Ce sont les fins de ligne type DOS (et Windows) : CRLF. Autrement dit le
> caractère ASCII CR (carriage return, 0x0d, Control-M ou '\r') suivi du
> caractère ASCII LF (line feed, 0x0a, Control-J ou '\n').
>
>> cat -A test-contact3-1.csv-o-o2.vcf > cat-test-contact2-1 => fichier
>> créé qui a des $
>
> Ce sont les fins de ligne type Unix : LF seulement.
>
>> Comment faire pour avoir des ^M$ quand je crée les fichiers?
>
> Je ne sais pas comment tu les crées. Dans un langage d'ascendance C, tu
> écris
>
>     "Hello, World\n"
>
> pour avoir des fins de ligne Unix et
>
>     "Hello, World\r\n"
>
> pour des fins de ligne DOS.


Je fais cela en bash
---
awk -F \; -v s37="sort -t ';' -k 37,37 -k 1,1" -v s1="sort -t ';' -k 1,1" '
   NR==1 {print ; next}
   $37 {p37=1 ; print |& s37 ; next}
   !$37 {p1=1 ; print |& s1 ; next}
     END {
     if (p37) {
       close(s37, "to")
       while ((s37 |& getline) > 0) print
     }


     if (p1) {
       close(s1, "to")
       while ((s1 |& getline) > 0) print
     }
   }
' $fichier_depart > $fichier_retour
---
# écriture de la première ligne qui correspond à la ligne d'entête du 
fichier csv
head -n1 $fichier_depart >  $fichier_retour


# écriture des autres lignes dont la catégorie n'est pas vide
tail -n+2 $fichier_depart | grep '[A-Za-z0-9]$' | sort -t';' -k37 -k3
-k1 -k2 >> $fichier_retour

# écriture des autres lignes dont la catégorie est vide
tail -n+2 $fichier_depart | grep '\;$' | sort -t';' -k37 -k3 -k1 -k2 >>
$fichier_retour
---

Soit l'un, soit l'autre.
Merci à Nicolas pour son aide pour awk

Le fichier vcf récupéré sur nextcloud a des ^M$
Le fichier csv de départ a été pondu avec un programme php et a des $.
Le programme se trouve sur une interface web de mon serveur. (php)

Après je traite le fichier en local avec un batch.
Cela me permet de voir les nouveaux contacts et ceux modifiés entre
nextcloud et les téléphones fixes.

Je modifie les contacts sur nextcloud si besoin et je recommence le
traitement :
récupération du vcf sur nextcloud - passage du fichier vcf avec
l'interface web pour transformer le vcf en csv - traitement du csv avec
mon programme batch.

Quand les contacts me paraissent bons, j'utilise un autre programme php
de mon serveur pour transformer le fichier csv en vcf.

Et c'est ce dernier vcf que je vais utiliser pour mettre à jour les
contacts sur mes téléphones fixes grâce à l'interface web de mon
téléphone gigaset c610ip.

>
> Pour un fichier déjà écrit, tu peux transformer les fins de ligne Unix
> (LF) en fins de lignes DOS (CRLF) avec
>
>     sed 's/$/\r/'


merci
J'avais essayé des sed mais pas avec \r.
C'est nickel, j'ai pu transférer le fichier vcf sur le téléphone.
Maintenant, il faut que j'inclus la commande quelque part.

C'était bien les fins de ligne qui posaient problème pour le transfert
et non que le fichier était trop gros et qu'il n'y avait plus de place
alors que j'avais effacé les contacts sur le téléphone!

Il faut que je me fasse un menu pour savoir comment m'y prendre. Sinon,
dans 1 ou 2 ans, je me demande bien ce qu'il va me rester la prochaine
fois que je mettrais mes contacts sur les téléphones fixes!

- récupérer les contacts des différends téléphones fixe
- récupérer les contacts avec nextcloud (normalement nextcloud et
téléphone mobile sont synchronisés)
- comparer les contacts et mettre à jour sur nexcloud (et donc le
téléphone mobile)
- rapatrier les contacts sur les téléphones fixes

En 2017, j'avais utilisé thunderbird.

Anne