Ich brauche eine portable Funktion/Subroutine, um die Position des letzten nicht leeren Zeichens in einer Zeichenfolge zu finden. Ich habe zwei Optionen gefunden: LEN_TRIM
und LNBLNK
. Verschiedene Compiler scheinen jedoch unterschiedliche Standards zu haben. Die offizielle Dokumentation für folgende Compiler schlägt vor, dass LEN_TRIM Teil des Fortran 95-Standard auf den folgenden Plattformen ist:Zeichenketten in Fortran: Portable LEN_TRIM und LNBLNK?
Allerdings ist es Es scheint, dass bei Compilern, die vor dem F95-Standard veröffentlicht wurden, nichts garantiert ist. Meine Erfahrung ist, dass ältere Compiler entweder LEN_TRIM
oder LNBLNK
angeben können, aber nicht unbedingt beides. Meine Lösung war Präprozessor conditionals zu verwenden:
#ifdef USE_LEN_TRIM
iNameLen = LEN_TRIM(cabase)
iExtLen = LEN_TRIM(caext)
#else
iNameLen = LNBLNK(cabase)
iExtLen = LNBLNK(caext)
#endif
und dann -DUSE_LEN_TRIM
an den Präprozessor übergeben. Allerdings bin ich kein großer Fan von Präprozessor-Bedingungen & zusätzliche Kompilierzeit Flags. Haben Sie Vorschläge für eine portable Funktion (vor dem Fortran 95-Standard), die die Position des letzten nicht leeren Zeichens in einer Zeichenfolge feststellt?
mhmhmh. sieht so aus, obwohl ich nicht darauf wetten würde. Getestet sowohl auf G95 als auch auf G77. –
LEN == F77 Standard; TRIM == F95-Standard – Pete