Jump to content
Ricky.Calle

Comma Delimited data

Recommended Posts

Ricky.Calle

Hello,

 

I would like to get some help with the task I have in hand. let me explain my dilemma.

 

  • I have a "CVS" file that is comma delimited format.
  • the file has two pieces of information separated by comma. Example bellow:
    • 50,WTF-00011
    • 75,WFT-00023
    • 100,WFT-00050
    • etc.... the file could have up 6000 lines.
  • I don't do not know how to write a code separate the line using the comma as a separator. 
  • I would like to assign the values before the comma into a variable "VAR1" for later use later in the program.
  • I would like to assign the values after the comma into a different variable "VAR2" for use later in the program.

 

Thank you in advance for your help.

 

Kind regards,

 

Ricky

Share this post


Link to post
Share on other sites
Lee Mac

You may use my existing Read CSV function for this task - I have included a test program on the linked page to demonstrate how to call the function in a program. You may then iterate over the list of rows and perform the necessary operations on each pair of items.

Share this post


Link to post
Share on other sites
asos2000

The Simple way

Thanks LEE for the subroutine

(defun c:test ( / data file )
  (if
    (and
      (setq file (getfiled "Select CSV File" "" "csv" 16))
      (setq data (LM:readcsv file))
      (setq e -1)
      )
    (repeat (length data)
      (setq var  (nth (setq e (1+ e)) data))
      (setq var1 (nth 0 var ))
      (setq var2 (nth 1 var ))

      ; The Code
      
      )
    )
  (princ)
  )
(princ)


;; Read CSV  -  Lee Mac
;; Parses a CSV file into a matrix list of cell values.
;; csv - [str] filename of CSV file to read
 
(defun LM:readcsv ( csv / des lst sep str )
    (if (setq des (open csv "r"))
        (progn
            (setq sep (cond ((vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList")) (",")))
            (while (setq str (read-line des))
                (setq lst (cons (LM:csv->lst str sep 0) lst))
            )
            (close des)
        )
    )
    (reverse lst)
)
 
;; CSV -> List  -  Lee Mac
;; Parses a line from a CSV file into a list of cell values.
;; str - [str] string read from CSV file
;; sep - [str] CSV separator token
;; pos - [int] initial position index (always zero)
 
(defun LM:csv->lst ( str sep pos / s )
    (cond
        (   (not (setq pos (vl-string-search sep str pos)))
            (if (wcmatch str "\"*\"")
                (list (LM:csv-replacequotes (substr str 2 (- (strlen str) 2))))
                (list str)
            )
        )
        (   (or (wcmatch (setq s (substr str 1 pos)) "\"*[~\"]")
                (and (wcmatch s "~*[~\"]*") (= 1 (logand 1 pos)))
            )
            (LM:csv->lst str sep (+ pos 2))
        )
        (   (wcmatch s "\"*\"")
            (cons
                (LM:csv-replacequotes (substr str 2 (- pos 2)))
                (LM:csv->lst (substr str (+ pos 2)) sep 0)
            )
        )
        (   (cons s (LM:csv->lst (substr str (+ pos 2)) sep 0)))
    )
)
 
(defun LM:csv-replacequotes ( str / pos )
    (setq pos 0)
    (while (setq pos (vl-string-search  "\"\"" str pos))
        (setq str (vl-string-subst "\"" "\"\"" str pos)
              pos (1+ pos)
        )
    )
    str
)

 

Edited by asos2000

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...