[OS X TeX] ifthen and regular expressions

Jeffrey J Weimer weimerj at email.uah.edu
Thu May 24 17:26:21 CEST 2007


On May 23, 2007, at 2:59 PM, Friedrich Vosberg wrote:

> Am 15.05.2007 um 17.11 schrieb Jeffrey J Weimer:
>>
>> On May 15, 2007, at 7:13 AM, Friedrich Vosberg wrote:
>>
>>> Does someone of You know how to get an ifthenelse switch that is  
>>> TRUE if the expansion of the given macro contains a given string.  
>>> For example:
>>>
>>> \def\string{court}
>>> \def\pattern{Royal High Court of Westminster}
>>>
>>> \ifthenelse{contains{\string}{\pattern}{%
>>>   TRUE
>>> }{%
>>>   FALSE
>>> }
>>
>> The coolstr package may be able to handle this.

I think a better way to do this is to split the pattern of words and  
match each word separately (again through a loop) using a simple  
\ifthenelse{\equal{word#N}{matchword}}{TRUE}{FALSE}. If the pattern  
always had the same number of words (say 5), then this might work ...

\def\FindStrInStr#1<#2 #3 #4 #5 #6>{
	\ifthenelse{\equal{#1}{#2}}{true}
		{\ifthenelse{\equal{#1}{#3}}{true}
			{\ifthenelse{\equal{#1}{#4}}{true}
				{\ifthenelse{\equal{#1}{#5}}{true}
					{\ifthenelse{\equal{#1}{#6}}{true}{false}
					}
				}
			}
		}
	}

\ifthenelse{\FindStrInStr{Court}<Royal High Court of Westminster>}{do  
if true}{do if false}

Putting this into a loop that would parse out each word of the  
pattern and pass it to be tested would be the next step. I have tried  
to do this, however I have run into the limitation that definitions  
parse input arguments as characters. Below is the beginning part of  
what I have set up so far. I cannot figure out how to test whether  
the argument passed to \fv at nextstep is the LAST word of the string ...

\documentclass{article}
\usepackage{xifthen}
\makeatletter
\def\fv at nextstep#1 #2{almost true (#1)(#2)}
\def\fv at checkstrmatch<#1>#2 #3{%
	\ifthenelse{\equal{#1}{#2}}%
		{true}%
		{\ifthenelse{\equal{#3}{}}%
			{false}%
			{%
			\fv at nextstep#3%
			}%
		}%
	}
\def\FindStrInStr#1#2{\fv at checkstrmatch<#1>#2}
\makeatother

\begin{document}

Here is a test to try men's souls ...

\FindStrInStr{Court}{High Court}

\end{document}

--
J. J. Weimer, Chemistry / Chemical & Materials Engineering
University of Alabama in Huntsville, MSB 125, 301 Sparkman Dr
Huntsville, AL 35899                phone: 256-824-6954



------------------------- Helpful Info -------------------------
Mac-TeX Website: http://www.esm.psu.edu/mac-tex/
TeX FAQ: http://www.tex.ac.uk/faq
List Archive: http://tug.org/pipermail/macostex-archives/
List Reminders & Etiquette: http://www.esm.psu.edu/mac-tex/list/





More information about the macostex-archives mailing list