\documentclass{article}
\usepackage{amsmath}
\usepackage{pgffor}
\ExplSyntaxOn
\cs_generate_variant:Nn \seq_set_split:Nnn { Nno }
\NewDocumentCommand\readonelevellist{ O{,} m m }
{
% #1 = séparateur principal (par défaut: ,)
% #2 = nom de la structure (ex: maliste)
% #3 = contenu de la liste
% Stocker le séparateur principal
\tl_if_exist:cF { g__pfl_#2_mainsep_tl }
{ \tl_new:c { g__pfl_#2_mainsep_tl } }
\tl_gset:cn { g__pfl_#2_mainsep_tl } { #1 }
%liste à construire
\seq_if_exist:cF { g__pfl_#2_main_seq }
{ \seq_new:c { g__pfl_#2_main_seq } }
\seq_clear:c { g__pfl_#2_main_seq }
\seq_set_split:Nno \l_tmpa_seq { #1 } { #3 }
\seq_gset_eq:cN { g__pfl_#2_main_seq } \l_tmpa_seq
% Stocker le nombre d'éléments
\int_if_exist:cF { g__pfl_#2_count_int }
{ \int_new:c { g__pfl_#2_count_int } }
\int_gset:cn { g__pfl_#2_count_int } { \seq_count:c { g__pfl_#2_main_seq } }
% Créer la macro \#2len qui retourne le compte
\cs_gset:cpn { #2len }
{ \int_use:c { g__pfl_#2_count_int } }
% Créer la macro \#3{i} qui retourne l'élément i
\exp_args:Nc \NewDocumentCommand { #2 } { m O{} }
{
% ##1 = index, ##2 = macro de sortie (optionnel)
\int_set:Nn \l_tmpa_int { \int_eval:n { ##1 } }
\tl_clear:N \l_tmpa_tl
% Test de longueur
\int_compare:nTF { \l_tmpa_int <= \int_use:c { g__pfl_#2_count_int } }
{
\tl_set:Nx \l_tmpa_tl { \seq_item:cn { g__pfl_#2_main_seq } { \int_use:N \l_tmpa_int } }
\tl_if_empty:nTF { ##2 }
{
% Pas de macro fournie : afficher directement
\tl_use:N \l_tmpa_tl
}
{
% Macro fournie : stocker dans ##2
\tl_set_eq:NN ##2 \l_tmpa_tl
}
}
{
\tl_if_empty:nTF { ##2 }
{
% Pas de macro fournie : afficher directement -none-
\text{-none-}
}
{
% Macro fournie : stocker dans ##2
\tl_set:Nn \l_tmpa_tl { }
\tl_set_eq:NN ##2 \l_tmpa_tl
}
}
}
}
\ExplSyntaxOff
\begin{document}
\readonelevellist{malisteA}{A1,A2,A3,{A4,A5},A6,on a $x+\frac{1}{x}$}
Longueur := \malisteAlen\\
\foreach \i in {1,...,\malisteAlen}{%
Élément n°\i:= \malisteA{\i}\\
}
\def\mamacroliste{A1,A2,A3,{A4,A5},A6,on a $x+\frac{1}{x}$}
\readonelevellist{malisteB}{\mamacroliste}
Longueur := \malisteAlen\\
\foreach \i in {1,...,\malisteAlen}{%
Élément n°\i:= \malisteA{\i}\\
}
\end{document}