Sharing a classic Fortran 77 utility: A robust string trimming function with quotes protection (itrim)

Hello everyone,

My name is Francisco Iglesias, I am 71 years old. I started my programming journey several decades ago with Fortran IV and Fortran 77. Although in recent years I have been exploring and enjoying the power of Python, I still hold a huge affection for Fortran, and I know that nowadays it is still very much alive in the scientific and supercomputing fields.

Before retiring, I created a personal library of functions to solve string manipulation limitations in Fortran 77. Today I want to share with the community one of my favorite routines: itrim.

What does this function do?

  • Removes leading and trailing spaces.
  • Reduces multiple intermediate spaces between words to an exact amount specified by the “k” parameter (for example, leaving exactly 1 space, 2 spaces, or 0 spaces to join everything).
  • Most importantly: It respects and leaves intact multiple spaces that are inside strings protected by single quotes (') or double quotes (").

I know that many students or engineers today work with legacy systems in Fortran 77 and dealing with strings has always been a challenge in this standard. I hope this code is useful to someone.

Here is a test program and the complete function:

  ! program pruebaitrim
  ! implicit none
  ! character a*1024, itrim*1024, b*1024
  ! integer*4 l
  ! a = 'Esto es    una   prueba a ver como sale y determinar si '//
  ! * 'realmente   funciona bien la ruutina para eliminar blancos '//
  ! * '"intermedios  de  una    hola      cadena  de  caracteres" '//
  ! * ' y ver ademas si "(respetamos     las       comillas) "'//
  ! * '   realmente respeta las cadenas encerradas entre comillas. '//
  ! * 'vamos a ver como sale este negocio. que mas puedo decir. '//
  ! * 'probemos y veamos que pasa'
  ! print*
  ! print*,'Original tal y como se escribio (sin itrim)'
  ! l = len_trim(a)
  ! print*,a(1:l)
  ! print*
  ! print*,'reducir espacios a uno 1'
  ! a = itrim (a,l,1)
  ! print*,a(1:l)
  ! print*
  ! print*,'reducir espacios a dos 2'
  ! a = itrim (a,l,2)
  ! print*,a(1:l)
  ! print*
  ! print*,'reducir espacios a cero 0'
  ! a = itrim (a,l,0)
  ! print*,a(1:l)
  ! b = itrim(a,0,0)
  ! print*,b(1:len_trim(b))
  ! stop
  ! end

c********************************************************************************
c* Rutina para eliminar espacios en blanco intermedios entre palabras en
c* una cadena de caracteres. Tambien se eliminan a la izquierda y derecha.
c* El tamaño total de la cadena no se puede reducir. Siempre sera igual al
c* tamaño definido en la instruccion CHARACTER.
c* El proceso consiste en suprimir los blancos a la izquierda y a la derecha
c* de la cadena de caracteres y suprimir todos aquellos espacios en blanco
c* innecesarios (mas de uno) que esten intermedios entre las palabras.
c* Se devuelve una cadena libre de espacios en blanco a la izquierda y a la
c* derecha y los espacios intermedios entre palabras estaran ajustados a lo
c* que se indique en el parametro “k”. De esta manera se pueden eliminar
c* todos los espacios en blanco o por el contrario, estos pueden ser sustituidos
c* por la cantidad de espacios indicados en el parametro “k”.
c* Si la variable “k” tiene el valor cero (0), entonces se eliminan todos los
c* espacios en blanco. La cadena devuelta estara libre de espacios en blanco.
c* Solo se respetan aquellos que esten entre comillas simples y/o dobles. Esto
c* significa que las cadenas de caracteres encerradas entre comillas se respetan
c* y se dejan tal cual estan. No se eliminan espacios en blanco entre comillas.
c*
c* Francisco Iglesias (Octubre-2024)
c********************************************************************************

  character*(*) function itrim (a,k)
  implicit none
  character a*(*)
  character blanco*1024, blanko(1024)*1 /1024*' '/
  equivalence (blanco, blanko(1))
  integer*4 n1, i, j, k
  logical*4 sw, swc

  itrim = a
  n1 = len_trim (a)
  if (n1 .eq. 0) return
  if (k .gt. 20) k = 1
  j = 1
  do while (j .le. n1  .and.  a(j:j) .eq. ' ') ! busca primer caracter no blanco
     j = j + 1
  enddo
  if (j .gt. n1) return
  sw = .false.
  swc = .true.
  i  = 0
  do j = j, n1
     if (a(j:j) .eq. "'" .or. a(j:j) .eq. '"') swc = .not. swc
     if (a(j:j) .eq. ' ' .and. swc) then
        sw = .true. ! espacios intermedios
     else
        if (sw .and. k .gt. 0) then
           itrim (i+1:i+k) = blanco (1:k)
           i = i + k
           sw = .false.
        endif
        i = i + 1
        itrim (i:i) = a (j:j)
     endif
  enddo
  if (i .lt. n1) itrim (i+1:) = blanco
  return
  end

Any comments, corrections, or suggestions to adapt it to more modern standards like Fortran 90/95 or 2018 are more than welcome. Warm regards to the new generations of Fortran programmers!

11 Likes

Welcome and thanks for sharing ITRIM()! I like the functionality quite a bit. I added some f90+ stylings as you suggested,
and ran it through a number of Fortran compilers using cexpl(1) (
which is a command line interface (CLI) to Compiler Explorer) and it
ran on all of them. If you do not mind, I would like to add something
like this to GitHub - urbanjost/M_strings: Fortran string manipulations · GitHub. which is a collection of string-related procedures.

The slightly modified result:

program pruebaitrim
implicit none
character(len=*),parameter   :: bracket='(*("[",g0,"]":,","))'
character(len=*),parameter   :: uno='(/,*(g0:,/))'
character(len=:),allocatable :: a,b

   a = 'Esto es    una   prueba a ver como sale y determinar si '     // &
       'realmente   funciona bien la ruutina para eliminar blancos '  // &
       '"intermedios  de  una    hola      cadena  de  caracteres" '  // &
       ' y ver ademas si "(respetamos     las       comillas) "'      // &
       '   realmente respeta las cadenas encerradas entre comillas. ' // &
       'vamos a ver como sale este negocio. que mas puedo decir. '    // &
       'probemos y veamos que pasa'

   print uno, 'Original tal y como se escribio (sin itrim)', a
   print uno, 'reducir espacios a uno 1',                    itrim (a, 1)
   print uno, 'reducir espacios a dos 2',                    itrim (a, 2)
   print uno, 'reducir espacios a cero 0',                   itrim (a, 0)

   b = itrim(a, 0)
   print *, b

   write(*,bracket)itrim('a b c',5)
   write(*,bracket)itrim('a',5)
   write(*,bracket)itrim('',5)
   write(*,bracket)itrim(' a b c',5)
   write(*,bracket)itrim('  a ',5)
   write(*,bracket)itrim('  a ""quoted',5)
   stop
contains

!*******************************************************************************
! Rutina para eliminar espacios en blanco intermedios entre palabras en
! una cadena de caracteres. Tambien se eliminan a la izquierda y derecha.
! El tamaño total de la cadena no se puede reducir. Siempre sera igual al
! tamaño definido en la instruccion CHARACTER.
! El proceso consiste en suprimir los blancos a la izquierda y a la derecha
! de la cadena de caracteres y suprimir todos aquellos espacios en blanco
! innecesarios (mas de uno) que esten intermedios entre las palabras.
! Se devuelve una cadena libre de espacios en blanco a la izquierda y a la
! derecha y los espacios intermedios entre palabras estaran ajustados a lo
! que se indique en el parametro “k”. De esta manera se pueden eliminar
! todos los espacios en blanco o por el contrario, estos pueden ser sustituidos
! por la cantidad de espacios indicados en el parametro “k”.
! Si la variable “k” tiene el valor cero (0), entonces se eliminan todos los
! espacios en blanco. La cadena devuelta estara libre de espacios en blanco.
! Solo se respetan aquellos que esten entre comillas simples y/o dobles. Esto
! significa que las cadenas de caracteres encerradas entre comillas se respetan
! y se dejan tal cual estan. No se eliminan espacios en blanco entre comillas.
!
! Francisco Iglesias (Octubre-2024)
!*******************************************************************************
pure function itrim (in,cnt) result (out)
character(len=*),intent(in)  :: in
integer,intent(in)           :: cnt
character(len=:),allocatable :: out
integer                      :: in_len, i, j
logical                      :: sw, swc
   ! initially output string will be long enough for longest potential result
   ! worst case is every letter is replaced by itself plus cnt spaces.
   ! then add one space to buffer length for simpler subsequent logic
   in_len = len_trim (in)
   out = repeat(' ',in_len*(cnt+1)+1)

   ! start copy at first non-blank character. If all blank set position to one
   j = verify(in,' ')
   j = merge(in_len+1,j,j==0)

   sw = .false.
   swc = .true.

   i  = 0
   do j = j, in_len
      if (in(j:j)  ==  "'" .or. in(j:j)  ==  '"') swc = .not. swc
      if (in(j:j)  ==  ' ' .and. swc) then
         sw = .true. ! espacios intermedios
      else
         if (sw .and. cnt  >  0) then
            out (i+1:i+cnt) = ' '
            i = i + cnt
            sw = .false.
         endif
         i = i + 1
         out (i:i) = in (j:j)
      endif
   enddo

   out=out(:i)

end function itrim

end program pruebaitrim

Appears to work with a number of compilers (via Compiler Explorer):

fall itrim.f90
Test Results from Compiler Explorer
aoccflang520 :++ cexpl -e -c aoccflang520 --skip-asm itrim.f90
aoccflang520 :STDOUT:
aoccflang520 :
aoccflang520 :Original tal y como se escribio (sin itrim)
aoccflang520 :Esto es    una   prueba a ver como sale y determinar si realmente   funciona bien la ruutina para eliminar blancos "intermedios  de  una    hola      cadena  de  caracteres"  y ver ademas si "(respetamos     las       comillas) "   realmente respeta las cadenas encerradas entre comillas. vamos a ver como sale este negocio. que mas puedo decir. probemos y veamos que pasa
aoccflang520 :
aoccflang520 :reducir espacios a uno 1
aoccflang520 :Esto es una prueba a ver como sale y determinar si realmente funciona bien la ruutina para eliminar blancos "intermedios  de  una    hola      cadena  de  caracteres" y ver ademas si "(respetamos     las       comillas) " realmente respeta las cadenas encerradas entre comillas. vamos a ver como sale este negocio. que mas puedo decir. probemos y veamos que pasa
aoccflang520 :
aoccflang520 :reducir espacios a dos 2
aoccflang520 :Esto  es  una  prueba  a  ver  como  sale  y  determinar  si  realmente  funciona  bien  la  ruutina  para  eliminar  blancos  "intermedios  de  una    hola      cadena  de  caracteres"  y  ver  ademas  si  "(respetamos     las       comillas) "  realmente  respeta  las  cadenas  encerradas  entre  comillas.  vamos  a  ver  como  sale  este  negocio.  que  mas  puedo  decir.  probemos  y  veamos  que  pasa
aoccflang520 :
aoccflang520 :reducir espacios a cero 0
aoccflang520 :Estoesunapruebaavercomosaleydeterminarsirealmentefuncionabienlaruutinaparaeliminarblancos"intermedios  de  una    hola      cadena  de  caracteres"yverademassi"(respetamos     las       comillas) "realmenterespetalascadenasencerradasentrecomillas.vamosavercomosaleestenegocio.quemaspuedodecir.probemosyveamosquepasa
aoccflang520 : Estoesunapruebaavercomosaleydeterminarsirealmentefuncionabienlaruutinaparaeliminarblancos"intermedios  de  una    hola      cadena  de  caracteres"yverademassi"(respetamos     las       comillas) "realmenterespetalascadenasencerradasentrecomillas.vamosavercomosaleestenegocio.quemaspuedodecir.probemosyveamosquepasa
aoccflang520 :[a     b     c]
aoccflang520 :[a]
aoccflang520 :[]
aoccflang520 :[a     b     c]
aoccflang520 :[a]
aoccflang520 :[a     ""quoted]
aoccflang520 :STDERR:
aoccflang520 :FORTRAN STOP

flangtrunk :++ cexpl -e -c flangtrunk --skip-asm itrim.f90
flangtrunk :STDOUT:
flangtrunk :
flangtrunk :Original tal y como se escribio (sin itrim)
flangtrunk :Esto es    una   prueba a ver como sale y determinar si realmente   funciona bien la ruutina para eliminar blancos "intermedios  de  una    hola      cadena  de  caracteres"  y ver ademas si "(respetamos     las       comillas) "   realmente respeta las cadenas encerradas entre comillas. vamos a ver como sale este negocio. que mas puedo decir. probemos y veamos que pasa
flangtrunk :
flangtrunk :reducir espacios a uno 1
flangtrunk :Esto es una prueba a ver como sale y determinar si realmente funciona bien la ruutina para eliminar blancos "intermedios  de  una    hola      cadena  de  caracteres" y ver ademas si "(respetamos     las       comillas) " realmente respeta las cadenas encerradas entre comillas. vamos a ver como sale este negocio. que mas puedo decir. probemos y veamos que pasa
flangtrunk :
flangtrunk :reducir espacios a dos 2
flangtrunk :Esto  es  una  prueba  a  ver  como  sale  y  determinar  si  realmente  funciona  bien  la  ruutina  para  eliminar  blancos  "intermedios  de  una    hola      cadena  de  caracteres"  y  ver  ademas  si  "(respetamos     las       comillas) "  realmente  respeta  las  cadenas  encerradas  entre  comillas.  vamos  a  ver  como  sale  este  negocio.  que  mas  puedo  decir.  probemos  y  veamos  que  pasa
flangtrunk :
flangtrunk :reducir espacios a cero 0
flangtrunk :Estoesunapruebaavercomosaleydeterminarsirealmentefuncionabienlaruutinaparaeliminarblancos"intermedios  de  una    hola      cadena  de  caracteres"yverademassi"(respetamos     las       comillas) "realmenterespetalascadenasencerradasentrecomillas.vamosavercomosaleestenegocio.quemaspuedodecir.probemosyveamosquepasa
flangtrunk : Estoesunapruebaavercomosaleydeterminarsirealmentefuncionabienlaruutinaparaelim
flangtrunk : inarblancos"intermedios  de  una    hola      cadena  de  caracteres"yveradema
flangtrunk : ssi"(respetamos     las       comillas) "realmenterespetalascadenasencerradase
flangtrunk : ntrecomillas.vamosavercomosaleestenegocio.quemaspuedodecir.probemosyveamosquep
flangtrunk : asa
flangtrunk :[a     b     c]
flangtrunk :[a]
flangtrunk :[]
flangtrunk :[a     b     c]
flangtrunk :[a]
flangtrunk :[a     ""quoted]
flangtrunk :STDERR:
flangtrunk :Fortran STOP

fppc64g9 :++ cexpl -e -c fppc64g9 --skip-asm itrim.f90

fppc64leg9 :++ cexpl -e -c fppc64leg9 --skip-asm itrim.f90

ifxlatest :++ cexpl -e -c ifxlatest --skip-asm --cflags ' -warn all -check all,nouninit -error-limit 1 -O0 -g -assume byterecl -traceback' itrim.f90
ifxlatest :STDOUT:
ifxlatest :
ifxlatest :Original tal y como se escribio (sin itrim)
ifxlatest :Esto es    una   prueba a ver como sale y determinar si realmente   funciona bien la ruutina para eliminar blancos "intermedios  de  una    hola      cadena  de  caracteres"  y ver ademas si "(respetamos     las       comillas) "   realmente respeta las cadenas encerradas entre comillas. vamos a ver como sale este negocio. que mas puedo decir. probemos y veamos que pasa
ifxlatest :
ifxlatest :reducir espacios a uno 1
ifxlatest :Esto es una prueba a ver como sale y determinar si realmente funciona bien la ruutina para eliminar blancos "intermedios  de  una    hola      cadena  de  caracteres" y ver ademas si "(respetamos     las       comillas) " realmente respeta las cadenas encerradas entre comillas. vamos a ver como sale este negocio. que mas puedo decir. probemos y veamos que pasa
ifxlatest :
ifxlatest :reducir espacios a dos 2
ifxlatest :Esto  es  una  prueba  a  ver  como  sale  y  determinar  si  realmente  funciona  bien  la  ruutina  para  eliminar  blancos  "intermedios  de  una    hola      cadena  de  caracteres"  y  ver  ademas  si  "(respetamos     las       comillas) "  realmente  respeta  las  cadenas  encerradas  entre  comillas.  vamos  a  ver  como  sale  este  negocio.  que  mas  puedo  decir.  probemos  y  veamos  que  pasa
ifxlatest :
ifxlatest :reducir espacios a cero 0
ifxlatest :Estoesunapruebaavercomosaleydeterminarsirealmentefuncionabienlaruutinaparaeliminarblancos"intermedios  de  una    hola      cadena  de  caracteres"yverademassi"(respetamos     las       comillas) "realmenterespetalascadenasencerradasentrecomillas.vamosavercomosaleestenegocio.quemaspuedodecir.probemosyveamosquepasa
ifxlatest : Estoesunapruebaavercomosaleydeterminarsirealmentefuncionabienlaruutinaparaelimi
ifxlatest : narblancos"intermedios  de  una    hola      cadena  de  caracteres"yverademass
ifxlatest : i"(respetamos     las       comillas) "realmenterespetalascadenasencerradasentr
ifxlatest : ecomillas.vamosavercomosaleestenegocio.quemaspuedodecir.probemosyveamosquepasa
ifxlatest :[a     b     c]
ifxlatest :[a]
ifxlatest :[]
ifxlatest :[a     b     c]
ifxlatest :[a]
ifxlatest :[a     ""quoted]

lfortran0590 :++ cexpl -e -c lfortran0590 --skip-asm --cflags ' --no-style-suggestions' itrim.f90
lfortran0590 :STDOUT:
lfortran0590 :
lfortran0590 :Original tal y como se escribio (sin itrim)
lfortran0590 :Esto es    una   prueba a ver como sale y determinar si realmente   funciona bien la ruutina para eliminar blancos "intermedios  de  una    hola      cadena  de  caracteres"  y ver ademas si "(respetamos     las       comillas) "   realmente respeta las cadenas encerradas entre comillas. vamos a ver como sale este negocio. que mas puedo decir. probemos y veamos que pasa
lfortran0590 :
lfortran0590 :reducir espacios a uno 1
lfortran0590 :Esto es una prueba a ver como sale y determinar si realmente funciona bien la ruutina para eliminar blancos "intermedios  de  una    hola      cadena  de  caracteres" y ver ademas si "(respetamos     las       comillas) " realmente respeta las cadenas encerradas entre comillas. vamos a ver como sale este negocio. que mas puedo decir. probemos y veamos que pasa
lfortran0590 :
lfortran0590 :reducir espacios a dos 2
lfortran0590 :Esto  es  una  prueba  a  ver  como  sale  y  determinar  si  realmente  funciona  bien  la  ruutina  para  eliminar  blancos  "intermedios  de  una    hola      cadena  de  caracteres"  y  ver  ademas  si  "(respetamos     las       comillas) "  realmente  respeta  las  cadenas  encerradas  entre  comillas.  vamos  a  ver  como  sale  este  negocio.  que  mas  puedo  decir.  probemos  y  veamos  que  pasa
lfortran0590 :
lfortran0590 :reducir espacios a cero 0
lfortran0590 :Estoesunapruebaavercomosaleydeterminarsirealmentefuncionabienlaruutinaparaeliminarblancos"intermedios  de  una    hola      cadena  de  caracteres"yverademassi"(respetamos     las       comillas) "realmenterespetalascadenasencerradasentrecomillas.vamosavercomosaleestenegocio.quemaspuedodecir.probemosyveamosquepasa
lfortran0590 :Estoesunapruebaavercomosaleydeterminarsirealmentefuncionabienlaruutinaparaeliminarblancos"intermedios  de  una    hola      cadena  de  caracteres"yverademassi"(respetamos     las       comillas) "realmenterespetalascadenasencerradasentrecomillas.vamosavercomosaleestenegocio.quemaspuedodecir.probemosyveamosquepasa
lfortran0590 :[a     b     c]
lfortran0590 :[a]
lfortran0590 :[]
lfortran0590 :[a     b     c]
lfortran0590 :[a]
lfortran0590 :[a     ""quoted]
lfortran0590 :STDERR:
lfortran0590 :warning: `--generate-object-code` is deprecated and will be removed in a future release; use `--separate-compilation` instead.
lfortran0590 :warning: `--generate-object-code` is deprecated and will be removed in a future release; use `--separate-compilation` instead.
lfortran0590 :STOP

nvfortran_x86_26_3 :++ cexpl -e -c nvfortran_x86_26_3 --skip-asm --cflags ' -Minform=inform -Mbackslash -Mbounds -Mchkptr -Mchkstk -traceback' itrim.f90
nvfortran_x86_26_3 :STDOUT:
nvfortran_x86_26_3 :
nvfortran_x86_26_3 :Original tal y como se escribio (sin itrim)
nvfortran_x86_26_3 :Esto es    una   prueba a ver como sale y determinar si realmente   funciona bien la ruutina para eliminar blancos "intermedios  de  una    hola      cadena  de  caracteres"  y ver ademas si "(respetamos     las       comillas) "   realmente respeta las cadenas encerradas entre comillas. vamos a ver como sale este negocio. que mas puedo decir. probemos y veamos que pasa
nvfortran_x86_26_3 :
nvfortran_x86_26_3 :reducir espacios a uno 1
nvfortran_x86_26_3 :Esto es una prueba a ver como sale y determinar si realmente funciona bien la ruutina para eliminar blancos "intermedios  de  una    hola      cadena  de  caracteres" y ver ademas si "(respetamos     las       comillas) " realmente respeta las cadenas encerradas entre comillas. vamos a ver como sale este negocio. que mas puedo decir. probemos y veamos que pasa
nvfortran_x86_26_3 :
nvfortran_x86_26_3 :reducir espacios a dos 2
nvfortran_x86_26_3 :Esto  es  una  prueba  a  ver  como  sale  y  determinar  si  realmente  funciona  bien  la  ruutina  para  eliminar  blancos  "intermedios  de  una    hola      cadena  de  caracteres"  y  ver  ademas  si  "(respetamos     las       comillas) "  realmente  respeta  las  cadenas  encerradas  entre  comillas.  vamos  a  ver  como  sale  este  negocio.  que  mas  puedo  decir.  probemos  y  veamos  que  pasa
nvfortran_x86_26_3 :
nvfortran_x86_26_3 :reducir espacios a cero 0
nvfortran_x86_26_3 :Estoesunapruebaavercomosaleydeterminarsirealmentefuncionabienlaruutinaparaeliminarblancos"intermedios  de  una    hola      cadena  de  caracteres"yverademassi"(respetamos     las       comillas) "realmenterespetalascadenasencerradasentrecomillas.vamosavercomosaleestenegocio.quemaspuedodecir.probemosyveamosquepasa
nvfortran_x86_26_3 : Estoesunapruebaavercomosaleydeterminarsirealmentefuncionabienlaruutinaparaeliminarblancos"intermedios  de  una    hola      cadena  de  caracteres"yverademassi"(respetamos     las       comillas) "realmenterespetalascadenasencerradasentrecomillas.vamosavercomosaleestenegocio.quemaspuedodecir.probemosyveamosquepasa
nvfortran_x86_26_3 :[a     b     c]
nvfortran_x86_26_3 :[a]
nvfortran_x86_26_3 :[]
nvfortran_x86_26_3 :[a     b     c]
nvfortran_x86_26_3 :[a]
nvfortran_x86_26_3 :[a     ""quoted]
nvfortran_x86_26_3 :STDERR:
nvfortran_x86_26_3 :FORTRAN STOP

gfortran161 :++ cexpl -e -c gfortran161 --skip-asm --cflags ' -Wall -Wextra -fPIC -fmax-errors=1 -g -fcheck=bounds -fcheck=array-temps -fbacktrace -fcoarray=single' itrim.f90
gfortran161 :STDOUT:
gfortran161 :
gfortran161 :Original tal y como se escribio (sin itrim)
gfortran161 :Esto es    una   prueba a ver como sale y determinar si realmente   funciona bien la ruutina para eliminar blancos "intermedios  de  una    hola      cadena  de  caracteres"  y ver ademas si "(respetamos     las       comillas) "   realmente respeta las cadenas encerradas entre comillas. vamos a ver como sale este negocio. que mas puedo decir. probemos y veamos que pasa
gfortran161 :
gfortran161 :reducir espacios a uno 1
gfortran161 :Esto es una prueba a ver como sale y determinar si realmente funciona bien la ruutina para eliminar blancos "intermedios  de  una    hola      cadena  de  caracteres" y ver ademas si "(respetamos     las       comillas) " realmente respeta las cadenas encerradas entre comillas. vamos a ver como sale este negocio. que mas puedo decir. probemos y veamos que pasa
gfortran161 :
gfortran161 :reducir espacios a dos 2
gfortran161 :Esto  es  una  prueba  a  ver  como  sale  y  determinar  si  realmente  funciona  bien  la  ruutina  para  eliminar  blancos  "intermedios  de  una    hola      cadena  de  caracteres"  y  ver  ademas  si  "(respetamos     las       comillas) "  realmente  respeta  las  cadenas  encerradas  entre  comillas.  vamos  a  ver  como  sale  este  negocio.  que  mas  puedo  decir.  probemos  y  veamos  que  pasa
gfortran161 :
gfortran161 :reducir espacios a cero 0
gfortran161 :Estoesunapruebaavercomosaleydeterminarsirealmentefuncionabienlaruutinaparaeliminarblancos"intermedios  de  una    hola      cadena  de  caracteres"yverademassi"(respetamos     las       comillas) "realmenterespetalascadenasencerradasentrecomillas.vamosavercomosaleestenegocio.quemaspuedodecir.probemosyveamosquepasa
gfortran161 : Estoesunapruebaavercomosaleydeterminarsirealmentefuncionabienlaruutinaparaeliminarblancos"intermedios  de  una    hola      cadena  de  caracteres"yverademassi"(respetamos     las       comillas) "realmenterespetalascadenasencerradasentrecomillas.vamosavercomosaleestenegocio.quemaspuedodecir.probemosyveamosquepasa
gfortran161 :[a     b     c]
gfortran161 :[a]
gfortran161 :[]
gfortran161 :[a     b     c]
gfortran161 :[a]
gfortran161 :[a     ""quoted]

1 Like