# Comment convertir toutes les dates d'un texte ?



## HairPods (8 Octobre 2020)

Bonjour à tous,

J'ai exporté un journal intime depuis WrittenDown.app dans un fichier .txt, pour les importer dans DayOne.app.

Pour ce faire, il faut que toutes les dates soient au format suivant : *Date: June 24, 2016 at 10:59:06 AM MDT*

Pour l'instant, elles sont au format suivant : *Date: 4 March 2012 at 00:26*

Est-ce que je peux convertir toutes les dates d'un coup ? Rechercher toutes les dates dans le texte et les convertir au bon format ? 

Merci.


----------



## LS Zaitsev (8 Octobre 2020)

Je ne connais pas ces logiciels.
Dans certains traitements de texte avancés, les dates sont automatiquement détectées (pour synchro avec un agenda par ex.) et il doit y avoir moyen d'en changer le format.

Sinon, il faut attendre l'intervention des rois du script !  Je ne vois pas d'autre solution...


----------



## Membre supprimé 1129907 (8 Octobre 2020)

Tu as un fichier comme ceci :

```
Date: 4 March 2012 at 00:26 blablabla
Date: 4 March 2012 at 00:27 blablabla
```

Et il faudrait le modifier comme ceci :

```
Date: March 4, 2016 at 00:26:00 AM MDT blablabla
Date: March 4, 2016 at 00:27:00 AM MDT blablabla
```

Est-ce bien ça ?
Il faudrait un exemple de conversion, car aucune idée du fuseau horaire pour l'heure du fichier d'origine.
Idem avec l'heure de l'après midi. Sera-t-il 14:00 sur le premier ou quelque chose comme 02:00 PM ?

Qu'as-tu comme éditeur de fichier texte sur ton mac (en dehors de page) ?


----------



## LS Zaitsev (8 Octobre 2020)

Il a au moins Textedit, qui doit se lancer à l'ouverture de son fichier .txt, puisque c'est l'application par défaut pour ce format.


----------



## HairPods (10 Octobre 2020)

ecatomb a dit:


> Tu as un fichier comme ceci :
> 
> ```
> Date: 4 March 2012 at 00:26 blablabla
> ...


Bonjour,

C'est exactement ça. 

L'affichage de l'heure peut-être en 24h dans les deux, pas de problème.

J'ai TextEdit, Sublime, iA Writer, TextEdit.


----------



## Membre supprimé 1129907 (10 Octobre 2020)

Parfait, "Sublime Text" gère les expression régulière donc on va pouvoir l'utiliser pour ça.

Donc ouvre ton fichier texte (heure en mode 24h, c'est plus simple) avec "Sublime Text"
Utilise l'outil pour remplacer en mode expression régulière.

Texte à remplacer :

```
^Date: ([0-9]+) ([a-zA-Z]+) ([0-9]+) at (..:..) (.*)$
```

Texte de remplacement (normalement la première ligne, mais c'est peut-être la deuxième avec Sublime.

```
Date: $2 $1, $3 at $4:00 MDT $5
Date: \2 \1, \3 at \4:00 MDT \5
```

Les lignes de ce type :

```
Date: 4 March 2012 at 00:26 blablabla
Date: 4 March 2012 at 00:27 blablabla
```

Devrait alors être remplacée par des lignes comme celle-ci (mois et numéro du jour inversés + ajout de 00 MDT pour l'heure)

```
Date: March 4, 2012 at 00:26:00 MDT blablabla
Date: March 4, 2012 at 00:27:00 MDT blablabla
```

Voici l'outil remplacé que j'ai de mon côté avec Visual Studio Code (c'est similaire)


----------



## HairPods (13 Octobre 2020)

ecatomb a dit:


> Parfait, "Sublime Text" gère les expression régulière donc on va pouvoir l'utiliser pour ça.
> 
> Donc ouvre ton fichier texte (heure en mode 24h, c'est plus simple) avec "Sublime Text"
> Utilise l'outil pour remplacer en mode expression régulière.
> ...


D'abord, je veux te remercier pour la rapidité et la précisions de tes réponses. C'est vraiment sympa de ta part. 

Dans Sublime, j'ai fait "Replace" et dans le premier champ, j'ai rempli "^Date: ([0-9]+) ([a-zA-Z]+) ([0-9]+) at (..:..) (.*)$". 

Sublime dit "Unable to find ^Date: ([0-9]+) ([a-zA-Z]+) ([0-9]+) at (..:..) (.*)$".


----------



## Membre supprimé 1129907 (13 Octobre 2020)

Il faut être en mode expression régulière
La petite case  .* sur la gauche doit être cochée


----------



## HairPods (14 Octobre 2020)

ecatomb a dit:


> Il faut être en mode expression régulière
> La petite case  .* sur la gauche doit être cochée
> Voir la pièce jointe 194659


Voilà ce que je rentre. Et ça ne fonctionne pas.


----------



## Membre supprimé 1129907 (14 Octobre 2020)

Cela fonctionne bien : 1ère ligne remplacée comme prévue. 
Peut-être un problème dans le texte que tu veux remplacer ?


----------



## baron (14 Octobre 2020)

Si je comprends bien l'expression régulière, on cherche du texte qui commence par *Date: etc.*

Comme on n'a pas d'exemple du texte d'origine, se pourrait-il qu'il ne contienne que quelque chose comme *4 March 2012 at 00:26 blablabla* (sans l'expression * date:* avant) ?


----------



## Membre supprimé 1129907 (14 Octobre 2020)

C'est l'idée que j'ai aussi. Tant qu'on n'a pas d'exemple de ligne, impossible de savoir ce qui ne va pas


----------



## HairPods (14 Octobre 2020)

Désolé, je suis totalement débutant en la matière. Il vous faut un exemple du texte à transformer ? 

L'intégralité de mes entrées dans WrittenDown peut être exportée dans un grand fichier texte.

Ce fichier texte contient toutes les entrées les unes après les autres, comme ça :

" _Date: 5 March 2012 at 22:25
Tags: Fac de Droit, Philosophie

Contenu de la note pour ce jour.


Date: 7 March 2012 at 15:46

Contenu de la note pour ce jour.
etc. "._ 

Est-ce que ça vous aide ?


----------



## Membre supprimé 1129907 (14 Octobre 2020)

ecatomb a dit:


> Tu as un fichier comme ceci :
> 
> ```
> Date: 4 March 2012 at 00:26 blablabla
> ...





HairPods a dit:


> Désolé, je suis totalement débutant en la matière. Il vous faut un exemple du texte à transformer ?
> 
> L'intégralité de mes entrées dans WrittenDown peut être exportée dans un grand fichier texte.
> 
> ...


C'est donc différent de ce que j'avais compris et que tu me confirmais...

Texte à remplacer :

```
^Date: ([0-9]+) ([a-zA-Z]+) ([0-9]+) at (..:..)$
```
voir

```
Date: ([0-9]+) ([a-zA-Z]+) ([0-9]+) at (..:..)
```
Cette deuxième version ne tiendra pas compte de ce qu'il y a sur la même ligne avant ou après le bloc de date (espace ou autre)
Ta première ligne semble signifier que c'est possible.

Texte de remplacement:

```
Date: \2 \1, \3 at \4:00 MDT \5
```


----------



## HairPods (17 Octobre 2020)

ecatomb a dit:


> C'est donc différent de ce que j'avais compris et que tu me confirmais...
> 
> Texte à remplacer :
> 
> ...


@ecatomb, je te remercie une nouvelle fois pour ta patience. C'est vraiment sympa de faire ça 

Sublime a transformé le texte comme je le voulais, c'est déjà super !

Cependant, je n'ai pu l'importer dans Day One car, d'après le technicien de l'application, pour importer un fichier texte, il faut qu'il réponde, en plus de la date, à deux critères : 

*Il doit y avoir deux retours chariot entre : *


La date et le début de l'entrée du journal.
La fin de l'entrée et la date de l'entrée suivante.

Or, pour l'instant, il n'y a qu'un retour chariot à la fois. C'est possible de demander à Sublime de faire ça aussi ?


----------



## Membre supprimé 1129907 (17 Octobre 2020)

Nouveau texte de remplacement:

```
\nDate: \2 \1, \3 at \4:00 MDT \5\n
```
Il rajoutera un saut de ligne (retour chariot) avant et après ta ligne de date. Il te suffira juste de supprimer celle qui sera en trop au début du document et à la fin.
Cela devrait être bon comme ça.

Le \n correspond au retour chariot unix (ton document doit avoir ce format).
Pour le retour chariot windows, ce serait: \r\n


----------



## HairPods (17 Octobre 2020)

ecatomb a dit:


> Nouveau texte de remplacement:
> 
> ```
> \nDate: \2 \1, \3 at \4:00 MDT \5\n
> ...


Pardon mais je ne veux pas faire de connerie. Quel texte dois-je remplacer par ça ? (Sachant que, maintenant, la date est donc au bon format).


----------



## Membre supprimé 1129907 (17 Octobre 2020)

Ah! Je pensais que tu pouvais repartir de l'ancienne version.
Dans ce cas:

```
(Date: [a-zA-Z]+ [0-9]+, [0-9]+ at ..:..:.. MDT)
```
à remplacer par 

```
\n\1\n
```


----------



## HairPods (17 Octobre 2020)

Ah mais c'est génial ! Tu sais comment faire pour que ça en rajoute deux ?


----------



## Membre supprimé 1129907 (17 Octobre 2020)

Dans ce cas on en met deux comme ici
\n\n
au lieu d'un seul


----------



## HairPods (20 Octobre 2020)

ecatomb a dit:


> Dans ce cas on en met deux comme ici
> \n\n
> au lieu d'un seul


Merci pour tout !


----------

