Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. Passing filename from C++ to Fortran

Passing filename from C++ to Fortran

Scheduled Pinned Locked Moved C / C++ / MFC
helpc++linuxquestion
27 Posts 5 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • R Offline
    R Offline
    RedSonja
    wrote on last edited by
    #1

    I got this old Fortran exe and I have to embed in in C++. After starting it needs two filenames entered by the user. I did this by putting the filenames in files, attaching handles to them, making a Pipe and attaching it to the child process, then doing ReadFile and WriteFile to the pipe, as shown in MSDN. Anyway, it gets the strings holding the filenames. I have to append \n else Fortran won't accept it. The Fortran people advised me to try with \r before \n, it seems to grab that too. C++ can append a \0 if I let it, I tried that too. However, when it takes the first string and tries to open the file, it can't do it and it returns an error. (It returns the error tidily to my C++ process, so it can't be that bad.) If I run it directly from the command line, as the original author did, it all works fine with the same files. So there must be something wrong with the way I pass my strings. Unfortunately I can see into the Fortran code but I can't get at it to see what the problem is. We have some old Fortran compilers lying about, but they won't even compile it. The original came from Linux, can that have something to do with it? The users have real problems if they use a Windows editor, it doesn't like Windows carriage returns, they say. But I run it from the command line and it reads all kinds of other files I generated with C++. There must be someone out there who has done this before?

    ------------- Bibo ergo sum

    D L C R 4 Replies Last reply
    0
    • R RedSonja

      I got this old Fortran exe and I have to embed in in C++. After starting it needs two filenames entered by the user. I did this by putting the filenames in files, attaching handles to them, making a Pipe and attaching it to the child process, then doing ReadFile and WriteFile to the pipe, as shown in MSDN. Anyway, it gets the strings holding the filenames. I have to append \n else Fortran won't accept it. The Fortran people advised me to try with \r before \n, it seems to grab that too. C++ can append a \0 if I let it, I tried that too. However, when it takes the first string and tries to open the file, it can't do it and it returns an error. (It returns the error tidily to my C++ process, so it can't be that bad.) If I run it directly from the command line, as the original author did, it all works fine with the same files. So there must be something wrong with the way I pass my strings. Unfortunately I can see into the Fortran code but I can't get at it to see what the problem is. We have some old Fortran compilers lying about, but they won't even compile it. The original came from Linux, can that have something to do with it? The users have real problems if they use a Windows editor, it doesn't like Windows carriage returns, they say. But I run it from the command line and it reads all kinds of other files I generated with C++. There must be someone out there who has done this before?

      ------------- Bibo ergo sum

      D Offline
      D Offline
      Defenestration
      wrote on last edited by
      #2

      If it runs OK from the command-line, why don't you pass in the filenames on the command-line when you call CreateProcess() ?

      R 1 Reply Last reply
      0
      • D Defenestration

        If it runs OK from the command-line, why don't you pass in the filenames on the command-line when you call CreateProcess() ?

        R Offline
        R Offline
        RedSonja
        wrote on last edited by
        #3

        It runs fine if I type in first "fortran.exe 1>test.out 2>test.log", then the two filenames "input.dat" and "test", both followed by CR. The Fortran.exe is waiting for two inputs on UNIT=5. My problem was to embed all this in my real-time stuff, so it gets called without the user realising. As far as I know that bit works, it does continue after it is fooled into believing it has 2 keyboard inputs. It just doesn't like the inputs. Did I go to all that trouble when there was an easier way of doing it? I couldn't even get a batch file to do it.

        ------------- Bibo ergo sum

        D 1 Reply Last reply
        0
        • R RedSonja

          It runs fine if I type in first "fortran.exe 1>test.out 2>test.log", then the two filenames "input.dat" and "test", both followed by CR. The Fortran.exe is waiting for two inputs on UNIT=5. My problem was to embed all this in my real-time stuff, so it gets called without the user realising. As far as I know that bit works, it does continue after it is fooled into believing it has 2 keyboard inputs. It just doesn't like the inputs. Did I go to all that trouble when there was an easier way of doing it? I couldn't even get a batch file to do it.

          ------------- Bibo ergo sum

          D Offline
          D Offline
          Defenestration
          wrote on last edited by
          #4

          Oh, I didn't realise the fortran.exe program gets the input for the two filenames.

          1 Reply Last reply
          0
          • R RedSonja

            I got this old Fortran exe and I have to embed in in C++. After starting it needs two filenames entered by the user. I did this by putting the filenames in files, attaching handles to them, making a Pipe and attaching it to the child process, then doing ReadFile and WriteFile to the pipe, as shown in MSDN. Anyway, it gets the strings holding the filenames. I have to append \n else Fortran won't accept it. The Fortran people advised me to try with \r before \n, it seems to grab that too. C++ can append a \0 if I let it, I tried that too. However, when it takes the first string and tries to open the file, it can't do it and it returns an error. (It returns the error tidily to my C++ process, so it can't be that bad.) If I run it directly from the command line, as the original author did, it all works fine with the same files. So there must be something wrong with the way I pass my strings. Unfortunately I can see into the Fortran code but I can't get at it to see what the problem is. We have some old Fortran compilers lying about, but they won't even compile it. The original came from Linux, can that have something to do with it? The users have real problems if they use a Windows editor, it doesn't like Windows carriage returns, they say. But I run it from the command line and it reads all kinds of other files I generated with C++. There must be someone out there who has done this before?

            ------------- Bibo ergo sum

            L Offline
            L Offline
            Luc Pattyn
            wrote on last edited by
            #5

            Hi, have you tried passing the Fortran exe filenames ending on \r (i.e. without any \n)? can you determine whether it is the first or the second file it fails to open? I suspect it understands only one line terminator, and the other one (if you use \r AND \n) is left unrecognized in the other filename. :)

            Luc Pattyn [Forum Guidelines] [My Articles]


            Fixturized forever. :confused:


            R 1 Reply Last reply
            0
            • L Luc Pattyn

              Hi, have you tried passing the Fortran exe filenames ending on \r (i.e. without any \n)? can you determine whether it is the first or the second file it fails to open? I suspect it understands only one line terminator, and the other one (if you use \r AND \n) is left unrecognized in the other filename. :)

              Luc Pattyn [Forum Guidelines] [My Articles]


              Fixturized forever. :confused:


              R Offline
              R Offline
              RedSonja
              wrote on last edited by
              #6

              So many answers, such kind people... This is what I came for. Anyway, yes, I tried just \r but these were not recognised as strings i.e. IOSTAT was not 0. READ(5,'(A)',IOSTAT=IOS) FILEN IF ( IOS .NE. 0 ) STOP 'MUST PROVIDE A FILE NAME' READ(5,'(A)',IOSTAT=IOS) FLBASE IF ( IOS .NE. 0 ) STOP 'MUST PROVIDE A ROOT FILE NAME' *** it complained here Now, with \n or with \r\n it takes the strings and continues. It is the first file it fails to open. I wonder why it complains at the second input and not at the first. Maybe I should input both in the same string... You may have something there with the line terminators... Shall try that.

              ------------- Bibo ergo sum

              G L 2 Replies Last reply
              0
              • R RedSonja

                So many answers, such kind people... This is what I came for. Anyway, yes, I tried just \r but these were not recognised as strings i.e. IOSTAT was not 0. READ(5,'(A)',IOSTAT=IOS) FILEN IF ( IOS .NE. 0 ) STOP 'MUST PROVIDE A FILE NAME' READ(5,'(A)',IOSTAT=IOS) FLBASE IF ( IOS .NE. 0 ) STOP 'MUST PROVIDE A ROOT FILE NAME' *** it complained here Now, with \n or with \r\n it takes the strings and continues. It is the first file it fails to open. I wonder why it complains at the second input and not at the first. Maybe I should input both in the same string... You may have something there with the line terminators... Shall try that.

                ------------- Bibo ergo sum

                G Offline
                G Offline
                Garth J Lancaster
                wrote on last edited by
                #7

                if you have 'a' fortran compiler that does work, why dont you create a stub / test exe yourself, accepting two filenames for example - experiment with that in place of the precompiled exe you've got - you can put some debug writes etc in your copy to see what works etc ... oh.. you dont say what the value of IOS is ... this is intel fortran, but checking for one of these may reveal more info .. http://www.intel.com/software/products/compilers/docs/flin/main_for/mergedProjects/bldaps_for/common/bldaps_rterrs.htm[^] 'g'

                R 1 Reply Last reply
                0
                • R RedSonja

                  So many answers, such kind people... This is what I came for. Anyway, yes, I tried just \r but these were not recognised as strings i.e. IOSTAT was not 0. READ(5,'(A)',IOSTAT=IOS) FILEN IF ( IOS .NE. 0 ) STOP 'MUST PROVIDE A FILE NAME' READ(5,'(A)',IOSTAT=IOS) FLBASE IF ( IOS .NE. 0 ) STOP 'MUST PROVIDE A ROOT FILE NAME' *** it complained here Now, with \n or with \r\n it takes the strings and continues. It is the first file it fails to open. I wonder why it complains at the second input and not at the first. Maybe I should input both in the same string... You may have something there with the line terminators... Shall try that.

                  ------------- Bibo ergo sum

                  L Offline
                  L Offline
                  Luc Pattyn
                  wrote on last edited by
                  #8

                  Hi, I would try "filename1\rfilename2\r" as a single string; I suspect \r is the right separator for Fortran, NULL is needed on the sender side, and an extra NULL in between the filenames ends up in FLBASE[1]. If the final NULL is confusing something else later on, there are ways to send a string without a terminating NULL too. A final thought: I understand you can no longer compile the full Fortran app. If your tests fail to show the way, you could write just a small Fortran program that tests the communication and shows all the characters that actually get read into FILEN and FLBASE. :)

                  Luc Pattyn [Forum Guidelines] [My Articles]


                  Fixturized forever. :confused:


                  R 1 Reply Last reply
                  0
                  • L Luc Pattyn

                    Hi, I would try "filename1\rfilename2\r" as a single string; I suspect \r is the right separator for Fortran, NULL is needed on the sender side, and an extra NULL in between the filenames ends up in FLBASE[1]. If the final NULL is confusing something else later on, there are ways to send a string without a terminating NULL too. A final thought: I understand you can no longer compile the full Fortran app. If your tests fail to show the way, you could write just a small Fortran program that tests the communication and shows all the characters that actually get read into FILEN and FLBASE. :)

                    Luc Pattyn [Forum Guidelines] [My Articles]


                    Fixturized forever. :confused:


                    R Offline
                    R Offline
                    RedSonja
                    wrote on last edited by
                    #9

                    No, putting them in one string didn't work, it really wants two, with \n. It doesn't seem to care about C++'s \0. Does it read them out of the pipe in the same order as I put them in? I tried both ways but it didn't work either. That is a good idea with the little test program. I have just written my first Fortran code in 20 years. Ugh, they call that a debugger? I shall now try and run that from C++. Progress report to follow...

                    ------------- Bibo ergo sum

                    R 1 Reply Last reply
                    0
                    • R RedSonja

                      No, putting them in one string didn't work, it really wants two, with \n. It doesn't seem to care about C++'s \0. Does it read them out of the pipe in the same order as I put them in? I tried both ways but it didn't work either. That is a good idea with the little test program. I have just written my first Fortran code in 20 years. Ugh, they call that a debugger? I shall now try and run that from C++. Progress report to follow...

                      ------------- Bibo ergo sum

                      R Offline
                      R Offline
                      RedSonja
                      wrote on last edited by
                      #10

                      What happened? When I call my little ftest.exe from the debugger or from the command window it works, I have to enter the two strings by hand. I can see that it has filled the input strings up to 80 chars, but still manages to open the file. When I call it from C++ it fills the strings up to 80 chars, but can't open the file. I tried terminating with \n, with \r\n, and with \r\n\0, it all made no difference. There must be something else. This is very strange. READ(5,'(A)',IOSTAT=IOS) FILEN It must be the '(A)'

                      ------------- Bibo ergo sum

                      modified on Tuesday, December 9, 2008 8:22 AM

                      L 1 Reply Last reply
                      0
                      • G Garth J Lancaster

                        if you have 'a' fortran compiler that does work, why dont you create a stub / test exe yourself, accepting two filenames for example - experiment with that in place of the precompiled exe you've got - you can put some debug writes etc in your copy to see what works etc ... oh.. you dont say what the value of IOS is ... this is intel fortran, but checking for one of these may reveal more info .. http://www.intel.com/software/products/compilers/docs/flin/main_for/mergedProjects/bldaps_for/common/bldaps_rterrs.htm[^] 'g'

                        R Offline
                        R Offline
                        RedSonja
                        wrote on last edited by
                        #11

                        I tried to look at the error code but it is a little smiley in my command window. I have to find out how to format Fortran to write in hex, oh dear.

                        ------------- Bibo ergo sum

                        1 Reply Last reply
                        0
                        • R RedSonja

                          What happened? When I call my little ftest.exe from the debugger or from the command window it works, I have to enter the two strings by hand. I can see that it has filled the input strings up to 80 chars, but still manages to open the file. When I call it from C++ it fills the strings up to 80 chars, but can't open the file. I tried terminating with \n, with \r\n, and with \r\n\0, it all made no difference. There must be something else. This is very strange. READ(5,'(A)',IOSTAT=IOS) FILEN It must be the '(A)'

                          ------------- Bibo ergo sum

                          modified on Tuesday, December 9, 2008 8:22 AM

                          L Offline
                          L Offline
                          Luc Pattyn
                          wrote on last edited by
                          #12

                          Hi, AFAIK '(A)' just means "take any text" I suggest you: - make sure your debugging stuff visualizes all special chars including space, NULL, CR, LF - display the status of both openfile operations, I mean the actual value so you can google it (a >0 test is not sufficient) - try the Fortran test app manually with different paths - show us all the relevant Fortran code :)

                          Luc Pattyn [Forum Guidelines] [My Articles]


                          Fixturized forever. :confused:


                          R 1 Reply Last reply
                          0
                          • L Luc Pattyn

                            Hi, AFAIK '(A)' just means "take any text" I suggest you: - make sure your debugging stuff visualizes all special chars including space, NULL, CR, LF - display the status of both openfile operations, I mean the actual value so you can google it (a >0 test is not sufficient) - try the Fortran test app manually with different paths - show us all the relevant Fortran code :)

                            Luc Pattyn [Forum Guidelines] [My Articles]


                            Fixturized forever. :confused:


                            R Offline
                            R Offline
                            RedSonja
                            wrote on last edited by
                            #13

                            This is the entire code: PROGRAM FTEST IMPLICIT NONE C INTEGER IOS CHARACTER*80 FILEN, FLBASE C C CONTINUE READ(5,'(A)',IOSTAT=IOS) FILEN IF ( IOS .NE. 0 ) STOP 'MUST PROVIDE A FILE NAME' WRITE (6) 'FILEN = *', FILEN, '*' READ(5,'(A)',IOSTAT=IOS) FLBASE IF ( IOS .NE. 0 ) STOP 'MUST PROVIDE A ROOT FILE NAME' WRITE (6) 'FLBASE = *', FLBASE, '*' OPEN(17,FILE=FILEN,FORM='FORMATTED',STATUS='OLD', $ READONLY,IOSTAT=IOS) IF ( IOS .NE. 0 ) THEN WRITE (6, FMT=*) 'ERROR NO INPUT FILE ', IOS ELSE WRITE (6) 'OPENED INPUT FILE OK' ENDIF C CONTINUE END

                            ------------- Bibo ergo sum

                            modified on Tuesday, December 9, 2008 8:46 AM

                            L 1 Reply Last reply
                            0
                            • R RedSonja

                              This is the entire code: PROGRAM FTEST IMPLICIT NONE C INTEGER IOS CHARACTER*80 FILEN, FLBASE C C CONTINUE READ(5,'(A)',IOSTAT=IOS) FILEN IF ( IOS .NE. 0 ) STOP 'MUST PROVIDE A FILE NAME' WRITE (6) 'FILEN = *', FILEN, '*' READ(5,'(A)',IOSTAT=IOS) FLBASE IF ( IOS .NE. 0 ) STOP 'MUST PROVIDE A ROOT FILE NAME' WRITE (6) 'FLBASE = *', FLBASE, '*' OPEN(17,FILE=FILEN,FORM='FORMATTED',STATUS='OLD', $ READONLY,IOSTAT=IOS) IF ( IOS .NE. 0 ) THEN WRITE (6, FMT=*) 'ERROR NO INPUT FILE ', IOS ELSE WRITE (6) 'OPENED INPUT FILE OK' ENDIF C CONTINUE END

                              ------------- Bibo ergo sum

                              modified on Tuesday, December 9, 2008 8:46 AM

                              L Offline
                              L Offline
                              Luc Pattyn
                              wrote on last edited by
                              #14

                              OK, now 1. what is the result opening the first file? is it ERROR ... or OK on first file? 2. where is the opening of the second file? and what is its result? :)

                              Luc Pattyn [Forum Guidelines] [My Articles]


                              Fixturized forever. :confused:


                              R 1 Reply Last reply
                              0
                              • L Luc Pattyn

                                OK, now 1. what is the result opening the first file? is it ERROR ... or OK on first file? 2. where is the opening of the second file? and what is its result? :)

                                Luc Pattyn [Forum Guidelines] [My Articles]


                                Fixturized forever. :confused:


                                R Offline
                                R Offline
                                RedSonja
                                wrote on last edited by
                                #15

                                It gives me an IOS=2 on the first file. I will worry about the second string another day, it gets used to build some complicated output filenames.

                                ------------- Bibo ergo sum

                                L 2 Replies Last reply
                                0
                                • R RedSonja

                                  It gives me an IOS=2 on the first file. I will worry about the second string another day, it gets used to build some complicated output filenames.

                                  ------------- Bibo ergo sum

                                  L Offline
                                  L Offline
                                  Luc Pattyn
                                  wrote on last edited by
                                  #16

                                  Hi, Not sure but maybe IOS=2 means "the file you want to read exists but is empty". Please check. I expect IOS=6 for "no such file", IOS=0 for anything else (until you start working on the file that is) unless the filename is invalid (not sure which code gets emited then). You could try creating and writing the file, rather than opening and reading; that way, Explorer (or DOS DIR) would show the effective filename. :)

                                  Luc Pattyn [Forum Guidelines] [My Articles]


                                  Fixturized forever. :confused:


                                  1 Reply Last reply
                                  0
                                  • R RedSonja

                                    It gives me an IOS=2 on the first file. I will worry about the second string another day, it gets used to build some complicated output filenames.

                                    ------------- Bibo ergo sum

                                    L Offline
                                    L Offline
                                    Luc Pattyn
                                    wrote on last edited by
                                    #17

                                    Hi, I installed Silverfrost F95 and was able to run this:

                                    PROGRAM FTEST
                                    IMPLICIT INTEGER(I-N)

                                    INTEGER IOS
                                    CHARACTER*80 FILEN, FLBASE
                                    CHARACTER C

                                    PRINT *,'enter filename1'
                                    READ(5,'(A)',IOSTAT=IOS) FILEN
                                    IF ( IOS .NE. 0 ) STOP 'MUST PROVIDE A FILE NAME'
                                    PRINT *, 'FILEN = *', FILEN, '*'
                                    DO 10 I = 1,80
                                    C=FILEN(I:I)
                                    IF (ICHAR(C).NE.32) PRINT *, 'FILEN[',I,']=',C,'=',ICHAR(C)
                                    10 CONTINUE

                                    PRINT *,'enter filename2'
                                    READ(5,'(A)',IOSTAT=IOS) FLBASE
                                    IF ( IOS .NE. 0 ) STOP 'MUST PROVIDE A ROOT FILE NAME'
                                    PRINT *, 'FLBASE = *', FLBASE, '*'
                                    DO 20 I = 1,80
                                    C=FLBASE(I:I)
                                    IF (ICHAR(C).NE.32) PRINT *, 'FLBASE[',I,']=',C,'=',ICHAR(C)
                                    20 CONTINUE

                                    OPEN(17,FILE=FILEN,FORM='FORMATTED',STATUS='OLD',IOSTAT=IOS)
                                    IF ( IOS .NE. 0 ) THEN
                                    PRINT *, 'ERROR NO INPUT FILE 1 ', IOS
                                    ELSE
                                    PRINT *, 'OPENED INPUT FILE 1 OK'
                                    ENDIF
                                    OPEN(18,FILE=FLBASE,FORM='FORMATTED',STATUS='OLD',IOSTAT=IOS)
                                    IF ( IOS .NE. 0 ) THEN
                                    PRINT *, 'ERROR NO INPUT FILE 2 ', IOS
                                    ELSE
                                    PRINT *, 'OPENED INPUT FILE 2 OK'
                                    ENDIF

                                    END

                                    it gives OK for existing files, and error 128 for non-existing files. The documentation says error codes could be different on different compilers. So it is my guess something is wrong in the way you pass the filenames from C++; anyway the above should be able to tell you what gets read. :)

                                    Luc Pattyn [Forum Guidelines] [My Articles]


                                    Fixturized forever. :confused:


                                    G R 2 Replies Last reply
                                    0
                                    • L Luc Pattyn

                                      Hi, I installed Silverfrost F95 and was able to run this:

                                      PROGRAM FTEST
                                      IMPLICIT INTEGER(I-N)

                                      INTEGER IOS
                                      CHARACTER*80 FILEN, FLBASE
                                      CHARACTER C

                                      PRINT *,'enter filename1'
                                      READ(5,'(A)',IOSTAT=IOS) FILEN
                                      IF ( IOS .NE. 0 ) STOP 'MUST PROVIDE A FILE NAME'
                                      PRINT *, 'FILEN = *', FILEN, '*'
                                      DO 10 I = 1,80
                                      C=FILEN(I:I)
                                      IF (ICHAR(C).NE.32) PRINT *, 'FILEN[',I,']=',C,'=',ICHAR(C)
                                      10 CONTINUE

                                      PRINT *,'enter filename2'
                                      READ(5,'(A)',IOSTAT=IOS) FLBASE
                                      IF ( IOS .NE. 0 ) STOP 'MUST PROVIDE A ROOT FILE NAME'
                                      PRINT *, 'FLBASE = *', FLBASE, '*'
                                      DO 20 I = 1,80
                                      C=FLBASE(I:I)
                                      IF (ICHAR(C).NE.32) PRINT *, 'FLBASE[',I,']=',C,'=',ICHAR(C)
                                      20 CONTINUE

                                      OPEN(17,FILE=FILEN,FORM='FORMATTED',STATUS='OLD',IOSTAT=IOS)
                                      IF ( IOS .NE. 0 ) THEN
                                      PRINT *, 'ERROR NO INPUT FILE 1 ', IOS
                                      ELSE
                                      PRINT *, 'OPENED INPUT FILE 1 OK'
                                      ENDIF
                                      OPEN(18,FILE=FLBASE,FORM='FORMATTED',STATUS='OLD',IOSTAT=IOS)
                                      IF ( IOS .NE. 0 ) THEN
                                      PRINT *, 'ERROR NO INPUT FILE 2 ', IOS
                                      ELSE
                                      PRINT *, 'OPENED INPUT FILE 2 OK'
                                      ENDIF

                                      END

                                      it gives OK for existing files, and error 128 for non-existing files. The documentation says error codes could be different on different compilers. So it is my guess something is wrong in the way you pass the filenames from C++; anyway the above should be able to tell you what gets read. :)

                                      Luc Pattyn [Forum Guidelines] [My Articles]


                                      Fixturized forever. :confused:


                                      G Offline
                                      G Offline
                                      Garth J Lancaster
                                      wrote on last edited by
                                      #18

                                      Luc Pattyn wrote:

                                      I installed Silverfrost F95

                                      nice one Luc - thats dedication !!! 'g'

                                      L 1 Reply Last reply
                                      0
                                      • R RedSonja

                                        I got this old Fortran exe and I have to embed in in C++. After starting it needs two filenames entered by the user. I did this by putting the filenames in files, attaching handles to them, making a Pipe and attaching it to the child process, then doing ReadFile and WriteFile to the pipe, as shown in MSDN. Anyway, it gets the strings holding the filenames. I have to append \n else Fortran won't accept it. The Fortran people advised me to try with \r before \n, it seems to grab that too. C++ can append a \0 if I let it, I tried that too. However, when it takes the first string and tries to open the file, it can't do it and it returns an error. (It returns the error tidily to my C++ process, so it can't be that bad.) If I run it directly from the command line, as the original author did, it all works fine with the same files. So there must be something wrong with the way I pass my strings. Unfortunately I can see into the Fortran code but I can't get at it to see what the problem is. We have some old Fortran compilers lying about, but they won't even compile it. The original came from Linux, can that have something to do with it? The users have real problems if they use a Windows editor, it doesn't like Windows carriage returns, they say. But I run it from the command line and it reads all kinds of other files I generated with C++. There must be someone out there who has done this before?

                                        ------------- Bibo ergo sum

                                        C Offline
                                        C Offline
                                        cp9876
                                        wrote on last edited by
                                        #19

                                        Another possible difference to running it from the command line is the location of the working directory (I note that you seem to be using filenames and not full paths). Maybe you are now successfully transferring the filenames but the working directory is different, perhaps somewhere where the program doesn't have permission, or a file that should exist in it doesn't. The statement: OPEN(17,FILE=FILEN,FORM='FORMATTED',STATUS='OLD', $ READONLY,IOSTAT=IOS) will give you some sort of error if the file doesn't exist as STATUS='OLD' tells the program that it should be there.

                                        Peter "Until the invention of the computer, the machine gun was the device that enabled humans to make the most mistakes in the smallest amount of time."

                                        R 1 Reply Last reply
                                        0
                                        • C cp9876

                                          Another possible difference to running it from the command line is the location of the working directory (I note that you seem to be using filenames and not full paths). Maybe you are now successfully transferring the filenames but the working directory is different, perhaps somewhere where the program doesn't have permission, or a file that should exist in it doesn't. The statement: OPEN(17,FILE=FILEN,FORM='FORMATTED',STATUS='OLD', $ READONLY,IOSTAT=IOS) will give you some sort of error if the file doesn't exist as STATUS='OLD' tells the program that it should be there.

                                          Peter "Until the invention of the computer, the machine gun was the device that enabled humans to make the most mistakes in the smallest amount of time."

                                          R Offline
                                          R Offline
                                          RedSonja
                                          wrote on last edited by
                                          #20

                                          Yes yes yes! I put the whole path in (without doubling the \) and the test program works. It doesn't work for the original Fortran yet but at least I know where to start. If Fortran is only going to give it 80 chars every time I can see some problems coming up on the target machine, because the paths can get a lot longer. I did try a relative path but it wasn't having it, must try and get Fortran to tell me where it is. In C++ I use _getcwd, can someone tell me how to get it in Fortran? It was giving me IOS=2, which is not in the list of Intel error messages.

                                          ------------- Bibo ergo sum

                                          C L 2 Replies Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups