Question

Je voudrais importer un fichier CSV dans Org-mode. D'autres ont déjà demandé sur l'importation CSV aux tables en mode Org. Ce n'est pas ce que je suis en train de faire. Je dois importer des fichiers CSV à des propriétés Org-mode.

Par exemple, un fichier CSV comme ceci:

Name,Tel,Mobile,Fax
John,11111,22222,33333

devrait devenir:

:PROPERTIES:
:Name: John
:Tel: 11111
:Mobile: 22222
:Fax: 33333
:END:

Avez-vous connaissez un moyen facile de le faire?

Était-ce utile?

La solution

L'approche la plus simple que je peux voir est de marquer les lignes de données que la région, puis utiliser une recherche regexp et remplacer:

Mx replace-regexp RET \(.*\),\(.*\),\(.*\),\(.*\) RET :PROPERTIES: Cq Cj :Name: \1 Cq Cj :Tel: \2 Cq Cj :Mobile: \3 Cq Cj :Fax: \4 Cq Cj :END: RET

Si vous avez besoin de faire cela pour de nombreux fichiers CSV variables avec différents en-têtes et le nombre de colonnes, alors je l'approche probablement avec macros clavier .

La réponse de user310031 ferait une bonne base pour cela. La macro peut réduire la mémoire tampon pour chaque rangée, insérer la ligne d'en-tête au-dessus, effectuer l'csv-transpose (qui semble nécessiter Mode CSV ) effectuer la recherche + remplacer, ajouter les lignes de :PROPERTIES: et :END:, élargir à nouveau le tampon, et laissez point sur la ligne avant la ligne suivante de données. Puis marquer simplement les lignes de données restantes comme la région, et tapez C-x C-k r .

Autres conseils

Utilisation csv mode, transposent des lignes et des colonnes par csv-transposition et le format avec remplacement-regexp:

Rechercher \

(. * \), \ (. * \)

remplacer pour: : \ 1: \ 2

Vous pouvez faire quelque chose comme ça. Votre exemple est pas trop clair. S'il y a plus d'une ligne, il suffit de définir les propriétés dans la même tête à plusieurs reprises. vous pouvez utiliser le nom pour créer une nouvelle rubrique, puis définir les propriétés de la rubrique. le code ci-dessous fonctionne pour les fichiers csv assez bien formatés.

(let ((lines (with-temp-buffer
               (insert-file-contents "data.csv")
               (split-string (buffer-string) "\n")))
      (properties)
      (values))

  (setq properties (split-string (car lines) ","))

  (loop for line in (cdr lines)
        do
        (setq values (split-string line ","))
        (loop for property in properties
              for value in values
              do
              (org-entry-put (point) property value))))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top