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.