********************************************************************* LibString 1.0 (c) 1998 Giulio Vistoli & Alex Pedretti ********************************************************************* Index 1. Introduction 2. Installation 3. Usage 4. Concluding Remarks 1. Introduction =============== This fortran77 library is developed to simplify strings handling and i/o parsing operation. In fortan the read operation of free format files (like C files) is not very easy, because this language requires fields with formatted position. On the other hand the native fortran77 does'nt have directed functions to manage the strings also for simpliest operations. In this library you can find functions & routines to read also the free format files and handle the strings. 2. Installation =============== In archive file you can find a Makefile to build a libstr.a library in order to use routines & functions in your program. Check in makefile compilation and link options for your computer. Default options are for SGI machines. If you can move the libstr.a in your lib directory, make install and link your programs with -lstr option, otherwise use -L -lstr options (PATH is directory who is placed libstr.a). 3. Usage ======== 3.1 Functions ~~~~~~~~~~~~~ 3.1.1. Length - Return the string length without the blanks characters Synopsis: integer function length(char) character *N char Description: Instead of the standard len function, this routine returns the real length of a string (without the blanks). 3.1.2 Isnumber - Check if the string argument contain a number Synopsis: logical function isnumber(char) character *N char Description: This routine returns a true value if char contain a number otherwise returns false. 3.1.3 Valnum - Return the real value contained into string argument Synopsis: real function valnum(char) character *N char Description: Obviously this routine can be used also with an integer value making a final casting. 3.2 Subroutines ~~~~~~~~~~~~~~~ 3.2.1 Right - return the right string portion. Synopsis: subroutine right(input,nchar,output) character *N input,output integer nchar Description: This routine returns in output argument the right nchar portion of input string. 3.2.2 Union - Join two strings Synopsis: subroutine union(input1,input2,output) character *N input1,input2,output Description: This routine chains two input strings in output argument. 3.2.3 Uniblk - Join two strings with spacing Synopsis: subroutine uniblk(input1,input2,nblank,output) character *N input1,input2,output integer nblank Description: This routine returns in output argument the chaining of the two input strings with nblank blank characters between them 3.2.4 Intstr - Translate a integer value into string Synopsis: subroutine intstr(int,char,nchar) character *N char integer nchar,int Description: This routine translates the int integer into char string. Nchar is the output string length to obtain a fixed size of output (example: 001,002,....,023,etc). If nchar is zero, the routine generates a string with the exact size of the int number (example:1,2,....,3423,etc). 3.2.5 Flostr - Translate a real*8 value into string Synopsis: subroutine intstr(real,char,ndec) character *N char integer ndec real*8 real Description: This routine translates the real value into char string. The real value must be in double precision. Ndec value is the size of decimal part 3.2.6 Pars - Perform the string parsing Synopsis: subroutine pars(char,word,nword) character *N char,word(*) integer nword Description: This routine parses a string in word defined by blank characters. The routine output is a string array (word(*)) and the nword value is the word number obtained from string parsing. Example: character *20 char,word(5) integer nword,i char='Fortran77 is a beautiful language' call pars(char,word,nword) doi=1,nword write(6,*)word(i) end do end This program shows this output: Fortran77 (word(1)) is ...... a ...... beautiful ...... language (word(5)) 3.2.7 readf - Parse a string with specified template Synopsis: subroutine readf(line,format,float,int,char,success) character *N line,format,char(*) integer int(*) real float(*) logical success Description: This routine searchs elements indicated into format string and puts them in float, int and char arrays. Possibilities for format elements are: a string field i integer field f float field x skip a field the logical success is returned false if routine readf finds a format error. Example: With readf routine you can read a PDB file with this simple program: implicit integer (k-l) parameter (maxatom=10000) character *80 line character *4 str(2) ! atom name and residue name character *4 atmname(maxatom),resname(maxatom) real flo(3) ! x,y,z coordinates real x(maxatom),y(maxatom),z(maxatom) integer in(2) ! atom e residue number integer atmnum(maxatom),resnum(maxatom) logical suc open(10,file='file.pdb') i=0 10 read(10,'(a80)',end=99)line if(line(1:4).eq.'ATOM')then i=i+1 call readf(line,'xiaaxifff',flo,in,str,suc) if(.not.suc)stop X(i)=flo(1) Y(i)=flo(2) Z(i)=flo(3) atmnum(i)=in(1) resnum(i)=in(2) atmname(i)=str(1) resname(i)=str(2) end if goto 10 99 end Note: The utility of this routine is very remarkeable with files written in free format such the Quanta/Chemnote mol files or Hyperchem hin files, unreadable with native fortran read instruction. 4. Concluding Remarks ===================== All trademarks and softwares directly or indirectly referred in this document, are copyrighted from legal owners. LibString is a program freeware and can be spreaded trough Internet, BBS, CD-ROM and each other electronic form. Authors of this library accepts no responsabilty for hardware/software damages resulting from the use of this package. Authors of this library are: Giulio Vistoli & Alex Pedretti School of Pharmacy Medicinal Chemistry Institute Milan University e-mail giulio@indigo.farma.unimi.it Bugs and suggestios are willcommed