Pesquisar este blog

quarta-feira, 21 de maio de 2014

Separar dados oriundos de uma tabela (ou arquivo “.csv”, “.prn” ou outro) em uma lista



            A função abaixo foi realizada para que, a partir de uma string com dados separados por algum caractere delimitador, ou mesmo strings onde se carregou alguma linha de um arquivo de tabela, como “.csv”, “.prn”, se separe estes dados em uma lista.

;na função abaixo temos:
; -> o parâmetro “linha_sepdados” é a string contendo os dados
;    separados por algum caracter, (como por 
;    exemplo: “AA;29,50;30 anos;NOTA 05;”)
; -> o parâmetro “caracter_sepdados” é o caractere de separação dos 
;    dados (no exemplo é “;”). Importante: para esta função, a linha
;    deve sempre ser finalizada com o mesmo.

(defun sepdados (linha_sepdados caracter_sepdados)
   (setq return_sepdados nil)
   (setq refil "")
   (setq x 1)
   (setq tammtr (strlen linha_sepdados))
   (while (>= tammtr x)
      (setq teste (substr linha_sepdados x 1)) 
      (if (/= teste caracter_sepdados)
         (progn
            (setq refil (strcat refil teste))
            (setq x (+ x 1))
         )
      (progn
         (setq return_sepdados (append return_sepdados (list refil))) ; montagem da lista.
         (setq x (+ x 1))
            (setq refil "")
      ) 
      )
   )  ;fim do loop de leitura de campos da linha
return_sepdados  ;retorna uma lista com os elementos                
                 ;antes dispostos na linha texto demilitados por
                 ;algum   caracter.
)

            Abaixo, um exemplo de chamada da função:

(setq lista_alunos nil)
(setq linha1_cadastro “Bento$12$Muriaé$MG$”)
(setq lista_alunos (sepdados linha1_cadastro “$”))

            O resultado será:

lista_alunos = (“Bento” “12” “Muriaé” “MG”)

Valeu, abraço.

Nenhum comentário:

Postar um comentário