日付を含むパラメータから年を抽出する

日付を含むパラメータから年を抽出する

重複の可能性あり:
日付を分割するにはどうすればいいですか?

独自のマクロのパラメータ内の日付から年を抽出する方法を知っている人はいますか?

つまり、

\themacro#1{...}

#1すでに形式に含まれている日付かyyyy、形式に含まれている日付のいずれかが含まれておりdd.mm.yyyy\themacroプレーン 形式に変換されますyyyy...

私が言いたいことは明確だと思います。簡単に言えば、日付から年を抽出する必要があるだけです (抽出が必要な場合)。

答え1

user1189687 はすでに、より良い解決策を提案していますが、私はすでにこれを書き始めているので、プレーン テキスト ソリューションが必要な場合は、次のようになります。

ここでのポイントは、自分が前者のケースに該当するのか、それとも後者のケースに該当するのかを認識することです。入力の形式がわかっていれば、これは簡単にできます。しかし、ここでは、どうやらわかっていないようです。

だから私がやることは次のようになります:

\makeatletter

\def\@themacro #1.#2\end@themacro{%
  \def\@tempyr{#1}%
  \def\@temprem{#2}%
}%
%
\def\themacro #1 {%
  \let\day\relax%
  \let\month\relax%
  \let\year\relax%
  \let\@tempyr\relax%
  \let\@temprem\relax%
  \@themacro#1.\relax\end@themacro% get day or year
  \if\relax\@temprem\relax%
    \if\relax\@tempyr\relax%
      \GenericError{}{Wrong date format}{}{}% Manage the error
    \else%
      \edef\year{\expandafter\noexpand\@tempyr}%
    \fi%
  \else%
    \edef\day{\expandafter\noexpand\@tempyr}%
    \expandafter\@themacro\@temprem\end@themacro% get month
    \if\relax\@temprem\relax%
      \GenericError{}{Wrong date format}{}{}% Manage the Error
    \else%
      \edef\month{\expandafter\noexpand\@tempyr}%
      \expandafter\@themacro\@temprem\end@themacro% get year
      \if\relax\@temprem\relax%
        \edef\year{\expandafter\noexpand\@tempyr}%
      \else%
        \GenericError{}{Wrong date format}{}{}% Manage the Error
      \fi%
    \fi%
  \fi%
}%
\makeatother%

このソリューションの利点は、不正な構文を検出し、必要に応じてフォールバックしたりエラーをスローしたりできることです。

ああ、忘れるところでした... もちろん、 の置換テキストとして年を取得します\year

存在する場合は、 および を取得することもでき\dayます\month

答え2

\StrRightパッケージで試してくださいxstring:

\documentclass{article}

\usepackage{xstring}
\def\getYear#1{\StrRight{#1}{4}}

\begin{document}

\noindent\getYear{12.12.2012}\\
\getYear{2012}

\end{document}

結果:

ここに画像の説明を入力してください

関連情報