Emacs: importeer een CSV in de org-mode

Emacs heeft een zeer mooie uitbreiding door de naam van org-mode.

Ik zou graag in staat zijn om gemakkelijk te laden CSV-bestanden in org-mode zonder noemenswaardige verdriet. Alles wat ik heb kunnen vinden is table-import of tafel-capture, die, simpel gezegd, zelfs niet bij benadering goed te werken.

Merk op dat een deel van mijn probleem is tekenreeksen met een komma in hen. 1,2,3,4 verschilt van 1,2 “3,4”.

Is er een functie die er zijn of een perl-script dat je kon lopen naar een csv-bestand om te zetten in org-mode-formaat?

Bedankt!


Antwoord 1, Autoriteit 100%

Van de org-mode handleiding:

C-C | Zet het actieve gebied aan
tafel. Als elke regel bevat ten minste
één TAB karakter, de functie
neemt aan dat het materiaal tab
uit elkaar gehaald. Als elke regel bevat een
komma, komma’s gescheiden (CSV)
Worden aangenomen. Zo niet, lijnen gespleten
bij witruimte in velden. Je kunt gebruiken
een prefix argument om een ​​bepaalde kracht
separator: C-u dwingt CSV, C-uC-u
Krachten en een numeriek argument N
geeft aan dat ten minste N opeenvolgende
spaties of alternatief een TAB wordt
de separator. Als er geen actieve
regio, met deze opdracht een lege
Org tafel.

Dus gewoon plak de gegevens in een org bestand, selecteer het, en doe C-u C-c |


Antwoord 2, autoriteit 6%

Ik neem aan dat u wilt uw CSV specifiek om te zetten in org-mode tabellen . Als dat niet het geval is, kunt u meer expliciet over output formaat in uw vraag te zijn.

Zoiets als dit zou het moeten doen, of in ieder geval krijg je een uitgangspunt kun je hack op:

 #!/usr/bin/perl
  use strict;
  use warnings;
  use Text::CSV;
  my $csv = Text::CSV->new();
  while ( my $line = <DATA> ) {
    if ( $csv->parse( $line )) {
      my $str = join '|' , $csv->fields();
      print "|$str|\n";
    }
  }
  __DATA__
  1,2,3,4
  1,2,"3,4"

Antwoord 3, Autoriteit 6%

Neem een ​​kijkje op:

C-h f org-table-convert-region

Ik ben altijd op het omzetten van csv dus ik dit aan mijn .emacs toegevoegd.

(defun org-convert-csv-table (beg end)
  (interactive (list (mark) (point)))
  (org-table-convert-region beg end ",")
  )
(add-hook 'org-mode-hook
      (lambda ()
    (define-key org-mode-map (kbd "<f6>") 'org-convert-csv-table)))

-update

Hier is een andere functie dat de opgegeven komma’s beschouwt ook:

a,"12,12",b --> a | 12,12 |b

voel je vrij om het te verbeteren: -).

(defun org-convert-csv-table (beg end)
  ; convert csv to org-table considering "12,12"
  (interactive (list (point) (mark)))
  (replace-regexp "\\(^\\)\\|\\(\".*?\"\\)\\|," (quote (replace-eval-replacement
                            replace-quote (cond ((equal "^" (match-string 1)) "|")
                                                   ((equal "," (match-string 0)) "|")
                                                   ((match-string 2))) ))  nil  beg end)

Antwoord 4, Autoriteit 5%

Probeer dit:

;; Insert a file and convert it to an org table
(defun aleblanc/insert-file-as-org-table (filename)
  "Insert a file into the current buffer at point, and convert it to an org table."
  (interactive (list (ido-read-file-name "csv file: ")))
  (let* ((start (point))
    (end (+ start (nth 1 (insert-file-contents filename)))))
    (org-table-convert-region start end)
    ))

Antwoord 5, Autoriteit 2%

Hier is een beetje een hack-job, maar het werkt.

wanneer u het CSV-bestand exporteren, kracht aanhalingstekens rond elk item, dan vervangen alle ","als een verticale balk.

Tot slot, maak ik een macro dat iets dergelijks doet:

C-a    ; Beginning-of-line
|      ; Self-insert-char
C-e    ; end-of-line
|      ; Self-insert-char
<down> ; Down one line

(ik ben niet 100% zeker of | is een zelf-insert-char of niet, dus het is het beste om uw eigen macro op te nemen)

Hit Tab Ergens in het midden van de tabel en de org-modus formatteert deze correct. Ik vind dit gemakkelijker te doen in een versmald gebied.

Voorgerecht: als u een verticale balk in uw input hebt .. waarschijnlijk zal het waarschijnlijk niet goed werken. Zo’n situaties moeten eenvoudig te zien zijn en relatief eenvoudig te repareren.

In het algemeen, bij het importeren van iets tekst-zoals in de org-modus, heb ik een combinatie van een slimme macro-schrijven gevonden en zoek-vervangen om de eenvoudigste manier te zijn

Ik hoop dat dat helpt.

Other episodes