in reply to Remove new line characters from PCL file

No, if you're going to slurp in the entire file, and you don't want certain characters in the resulting string, you have to remove them yourself.

Fortunally, removing characters from a string using Perl is rather trivial. I'm sure you've heard of the tr/// and s/// operators.

  • Comment on Re: Remove new line characters from PCL file

Replies are listed 'Best First'.
Re^2: Remove new line characters from PCL file
by Anonymous Monk on Jan 16, 2009 at 17:18 UTC
    Hi thanks for response.

    The thing is that when i open the '.dat' file and assigning it to the variable the new line character has already been evaluated and applied to the format so what i am looking for is that the script takes the line literally and not apply the new line character.

    I would then be carrying out a tr// on the already changed file which would not give me the desired results, which is basically to have a mirror image of the imput file with a couple of word changes.

      I'm guessing here... I'm guessing that this is a Win32 issue, and the '.dat' file is binary, not text...

      ...in which case the problem could be: by default Perl, when reading by <$FILE> will replace CRLF pairs by LF -- irrespective of the state of $/.   print will do the inverse on output.

      To avoid this you can: open $FILE, '<:raw', ... ; or open $FILE, '<', ... ; binmode($FILE) ;, for input and similarly for output. (See binmode and open.) Or you can use read (read), or for deeper magic, sysread (sysread).

      Aside from being the default value for $/ (the end of line marker when reading), line feeds aren't special to Perl. Perl doesn't apply any formatting (contrary to what you claim).

      maybe using the ':raw' command would that work?

      That would prevent CR+LF from being transformed to LF when reading in Windows. You can use it as follows:

      binmode($FILE);
      what i am looking for is that the script takes the line literally and not apply the new line character

      Perhaps it's just me, but I don't understand what you mean there - you want Perl to 'take the line literally'? (rather than taking it figuratively or metaphorically?)

      Could you re-phrase this, it's not clear (to me at least) why just taking out the newline characters with tr/// won't give you the result you want.

      update: re-reading the original question, it looks like its the concept of 'new line characters in the middle of a line' which is proving slippery. Not to sound pedantic, but I've never seen a newline character in the middle of a line. They tend to be at the end of each line.

      Do you mean that some of the newlines are ones you want to keep, and some of them are unwanted?

      How do you tell apart the ones you want versus the ones you don't want? Maybe if you were to show us a sample of the file, we'd be able to help you better.

      Or is this a UNIX-versus-DOS different-newline-characters issue?

      update2: or do you mean that some of the newline characters are (or should be) escaped?