views:

56

answers:

1

Hi:

I need a macro that extracts pairs of number from a string that looks like this:

  n1-m1,n2-m2,n3-m3,n4-m4  (it could be longer)

where n1,m1,n2,m2,... are numbers from 0 - 15. How can I go about getting the pairs (n1,m1), and (n2,m2), (n3,m3), etc inside my macro? I will need to use each pair once, after which I can, if needed, disregard the pair.

Assuming each digit is a 2-digit number (not an elegant thing to do), and butchering a code I found by Debilski in this forum, I managed to get the first pair doing the following:

\documentclass[11pt]{article}
\def\macroGetPairs #1{\getPairs#1.\wholeString}
\def\getPairs#1#2-#3#4,#5\wholeString {
\if#1.%
\else
  % Test if pair was successfully extracted
  Got pair (#1#2,#3#4). Still left: #5\\

  % Begin recursion
  %\takeTheRest#5\ofTheString
\fi}


\def\takeTheRest#1\ofTheString\fi
{\fi \getPairs#1\wholeString}


\begin{document}
\macroGetPairs{10-43,40-51,60-73,83-97}
\end{document}

However, I am not sure how to get the recursion working for me to get the rest of the pairs. I thought that simply uncommenting the line

  %\takeTheRest#5\ofTheString

should do it, but it does not work. Note that the macro's test call is:

\macroGetPairs{10-43,40-51,60-73,83-97}

Any suggestions? Thank you very much,

ERM

A: 

This seems to get your test to work:

\documentclass{article}

\def\macroGetPairs#1{\getPairs#1,.\wholeString}
\def\getPairs#1#2-#3#4,#5\wholeString {%
  Got pair (#1#2,#3#4).\\
\if#5.\else%
  \getPairs#5\wholeString
\fi}

\begin{document}
\noindent\macroGetPairs{10-43,40-51,60-73,83-97}
\end{document}

Your code was basically working, but there was no way for \getPairs to match its input on the final expansion (\getPairs 83-97). Your end-of-recursion test (\if#1.) was also testing #1 rather than #5, which is what I've done here. Maybe if there was some different way of formatting the argument to \getPairs that would have worked.

Tom
@Tom: Thank you very much. That makes a lot of sense. Thank you very much. I am just now learning how to play with LaTeX' programming capabilities and I am having fun, but all I do is go by examples in the web, so really all I can do is infer things from them, not really learn them. I will keep posting questions as I get them. Once again, Thanks!
ERM