Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Wie kürzt man einen String?

1 view
Skip to first unread message

vatolin

unread,
Nov 24, 2009, 10:56:35 AM11/24/09
to
Moin.

Wie kann man erreichen, dass ein String untersucht wird und -- wenn er
eine bestimmte Zeichenfolge enthält -- alles was links von dieser
Zeichenfolge steht, bei der Ausgabe weg gelassen wird?

DiV und Gruß. Friedrich

Message has been deleted

Ulrich D i e z

unread,
Nov 24, 2009, 3:50:24 PM11/24/09
to
Friedrich schrieb:

> Wie kann man erreichen, dass ein String untersucht wird und -- wenn er

> eine bestimmte Zeichenfolge enth�lt -- alles was links von dieser


> Zeichenfolge steht, bei der Ausgabe weg gelassen wird?

Kommt drauf an.

1. Sollen die Token, aus denen der String besteht, vor der
Untersuchung expandiert werden?
2. Kommen auch �ffnende und schliessende geschweifte
Klammern (bzw catcode1/2-character) als Bestandteil der
"bestimmten Zeichenfolge" in Frage?
3. Kommen auch # bzw catcode-6-character als Bestandteil
der "bestimmten Zeichenfolge" in Frage?
4. Kann es vorkommen, dass die "bestimmte Zeichenfolge"
selbst im zu untersuchenden String in geschweifte Klammern
(bzw catcode1/2-character) eingefasst vorkommt?
5. Willst du mit dem untersuchenden Makro immer auf ein-
und dieselbe "bestimmte Zeichenfolge" hin untersuchen?
6. Soll auch die "bestimmte Zeichenfolge" als Argument
an das Makro �bergebbar sein?
7. K�nnen sonstige Gemeinheiten vorkommen, die mir
grade nicht einfallen?
8. Sollen bei den Strings catcode-11- und catcode-12-
Character-Token nicht anhand des catcode voneinander
unterschieden werden?

Falls bis auf die f�nfte alle diese Fragen mit "nein" beantwortbar
sind, kannst du dir vielleicht mit "delimited arguments" behelfen.

Das Makro \removeleftfromMoppel im Beispiel unten entfernt von
seinem Argument alles, was links von dem Teilstring "Moppel" steht.

Hoffentlich wird jemand ein Package mit der von dir gesuchten
Funktionalit�t nennen - da kannst du dann den Quellcode studieren
und genau erfahren, wie man derartiges erreichen kann.
Es gibt da Diverses auf CTAN, aber mir fallen grade die Namen
dieser Packages nicht ein und f�r die Suche im Katalog bin ich
grade zu faul ;-)

Ulrich


\documentclass{minimal}
\makeatletter
\newcommand\@ifnull[1]{%
\romannumeral\expandafter\@firstofone\expandafter{\expandafter
\expandafter\expandafter\@rmstop\csname @\expandafter\@gobble
\string{\expandafter\@secondoftwo\expandafter{\expandafter{%
\string#1}{}\expandafter\expandafter\expandafter\@gobble
\expandafter\@gobble\string}{}\expandafter\expandafter
\expandafter\@firstoftwo\expandafter\expandafter\expandafter{%
\expandafter\@gobble\string}second}{first}oftwo\endcsname}%
}
\newcommand*\@rmstop{0 }
%%%%%
\newcommand\removeleftfromMoppel[1]{%
\romannumeral
\expandafter\@ifnull
\expandafter{\@gobbleToMoppel{}#1Moppel}%
{\@rmstop#1}%
{\@gobbleToMoppel{\@rmstop Moppel}#1}%
}
\@ifdefinable\@gobbleToMoppel{%
\long\def\@gobbleToMoppel#1#2Moppel{#1}%
}
\makeatother
\begin{document}

\removeleftfromMoppel{TestMoppelTest}

\removeleftfromMoppel{TestMoppel Test}

\removeleftfromMoppel{Test}

\removeleftfromMoppel{MoppelTest}

\removeleftfromMoppel{MoppelMoppelTest}

\removeleftfromMoppel{TestMoppel}

\end{document}

Holger Bruenner

unread,
Nov 25, 2009, 3:17:53 AM11/25/09
to
On 24 Nov., 21:50, Ulrich D i e z <eu_angel...@web.de> wrote:
> Friedrich schrieb:
>
> > Wie kann man erreichen, dass ein String untersucht wird und -- wenn er
> > eine bestimmte Zeichenfolge enthält -- alles was links von dieser

> > Zeichenfolge steht, bei der Ausgabe weg gelassen wird?
>
> Hoffentlich wird jemand ein Package mit der von dir gesuchten
> Funktionalität nennen

xstring ist Dein Freund, z. B. per \StrBefore (oder einer sinnreichen
Kombination von Teilstring-Suchen)

> - da kannst du dann den Quellcode studieren
> und genau erfahren, wie man derartiges erreichen kann.

..oder einfach das package verwenden ;-)

HTH,

Holger

0 new messages