Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

initialize fortran character array with variable length strings

I have a code where I set up a character array with set of default "options", which I may or may not wish to overwrite during the code execution. If I initialize the array with strings of all the same length (shorter or equal to the maximum possible length of 5), then the code works:

PROGRAM test
  character(len=5) :: s(3)=["a","b","c"]
  s(1)="12345678"
  print *,s
END PROGRAM test

output

12345b    c    

But if the strings are variable lengths.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

character(len=5) :: s(3)=["a","bb","c"]

Then I get a compilation error:

Error: Different CHARACTER lengths (1/2) in array constructor at (1)

I can get it to work by padding with spaces to make all string equal like this

 character(len=5) :: s(3)=["a ","bb","c "]

But that is a bit tedious for my actual example as I have some very long strings, so it is a lot of space-bar-pressing-while-counting-out-loud… Is there a way to inititalize character arrays with variable length variables, i.e. some kind of auto padding?

>Solution :

You need to manually specify the type-spec in the array constructor, as

character(len=5) :: s(3) = [character(len=5) :: "a", "bb", "c"]

this will convert each element in the array to same type, character(len=5), such that the array constructor is legal.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading