From 974ef0fe7a81cb9a75ade69c9806f9bc4cde6eb2 Mon Sep 17 00:00:00 2001 From: Jesse Millwood Date: Tue, 8 Oct 2024 18:32:16 -0400 Subject: [PATCH] Update embedded csv generating script --- SpaceCompanies.org | 99 ++++++++++++++++++++++++++++------------------ 1 file changed, 61 insertions(+), 38 deletions(-) diff --git a/SpaceCompanies.org b/SpaceCompanies.org index c501c38..a4cdee6 100644 --- a/SpaceCompanies.org +++ b/SpaceCompanies.org @@ -11,47 +11,70 @@ #+end_src #+begin_src emacs-lisp :exports none - (defun extract-data () - (let* ((entry (org-element-at-point)) - (level (org-element-property :level entry)) - (props (org-entry-properties)) - (name (cdr (assoc "ITEM" props))) - (homepage (cdr (assoc "HOME_PAGE" props))) - (category (cdr (assoc "CATEGORY" props))) - (jobsurl (cdr (assoc "JOB_POSTS_URL" props))) - (headquarters (cdr (assoc "HEADQUARTERS" props))) - (usoffice (cdr (assoc "US_OFFICE" props))) - (remotefreindly (cdr (assoc "REMOTE_FREINDLY" props))) - (org-point (point))) - (if (eq level 2) - (with-current-buffer "*Company Data*" - (message (format "PROPS: %S" props)) - (insert (format "%s,%s,\"%s\",%s,\"%s\",\"%s\",%s\n" - name - homepage - category - jobsurl - headquarters - usoffice - remotefreindly - )) - ) - ) +(setq export-file "SpaceCompanies.csv") + +(defun get-multi-valued (pom prop) + (let ((end (save-excursion (search-forward ":END:"))) + (elt-b nil) + (elt-e nil) + (elt nil) + (values '())) + (save-excursion + (setq elt-b (search-forward-regexp (format ":%s\\+?:" prop) end t)) + (while elt-b + (setq elt-e (line-end-position)) + (setq elt (format "%s" (buffer-substring-no-properties + elt-b elt-e))) + (setq values (cons elt values)) + (setq elt-b (search-forward-regexp (format ":%s\\+?:" prop) end t))) ) - ) - (save-excursion - (search-forward-regexp "^\* Companies") - (get-buffer-create "*Company Data*") - (with-current-buffer "*Company Data*" - (erase-buffer) - (insert "Name,Homepage,Category,Job Posts URL,Headquarters,US Office,Remote Friendly,Notes\n")) - (beginning-of-line) - (org-map-entries 'extract-data nil 'tree) - ) -#+end_src + values + )) -#+RESULTS: +(defun extract-company-data () + (let* ((cur-point (point)) + (entry (org-element-at-point)) + (level (org-element-property :level entry)) + (props (org-entry-properties)) + (name (org-entry-get cur-point "ITEM")) + (homepage (org-entry-get cur-point "HOME_PAGE")) + (category (get-multi-valued cur-point "CATEGORY")) + (jobsurl (org-entry-get cur-point "JOB_POSTS_URL")) + (headquarters (org-entry-get cur-point "HEADQUARTERS")) + (usoffice (get-multi-valued cur-point "US_OFFICE")) + (remotefreindly (org-entry-get cur-point "REMOTE_FREINDLY"))) + (if (eq level 2) + (with-current-buffer export-file + ;; (message (format "PROPS: %S" props)) + (insert (format "%s,%s,\"%s\",%s,\"%s\",\"%s\",%s\n" + name + homepage + category + jobsurl + headquarters + usoffice + remotefreindly + )) + )) + ) + ) + +;; Main +(save-excursion + (goto-char (point-min)) + (search-forward-regexp "^\* Companies" nil t) + (beginning-of-line) + (get-buffer-create export-file) + (with-current-buffer export-file + (erase-buffer) + (insert "Name,Homepage,Category,Job Posts URL,Headquarters,US Office,Remote Friendly,Notes\n")) + (org-map-entries 'extract-company-data nil 'tree) + (with-current-buffer export-file + (write-file export-file) + ) + ) +#+end_src * Terms - SBIR