|
Prev: perl utility
Next: FAQ 1.9 How does Perl compare with other languages like Java, Python, REXX, Scheme, or Tcl?
From: John on 23 Apr 2008 07:31 I want to read a file line-by line and write it line by line to another file. Regarless of environment I want newline start with DOS's \x0d\x0a Here's the code snippet: $ii=open(MYHAN,"<file01.htm"); open(MYHAN2,">>receive.htm"); binmode(MYHAN); binmode(MYHAN2); while ($line=<MYHAN>) { chomp($line); $line=~s/\x0d//g; # probably unnecessary $line=~s/\x0a//g; print MYHAN2 $rivi."testing\x0d\x0a"; } close MYHAN; closeMYHAN2; The problem is that I get in "receive.txt" I get ending "balhblahtesting[CR][CR][LF]" where [CR] mean carriage return and [LF] line feed. Why is this happening? I've chomped and ~s'd the $line. I've also binmoded both file handles for good measure.
From: John on 23 Apr 2008 07:56 John <John.Smith(a)invalid.com> wrote: >I want to read a file line-by line and write it line by line to another file. >Regarless of environment I want newline start with DOS's \x0d\x0a > >Here's the code snippet: > $ii=open(MYHAN,"<file01.htm"); open(MYHAN2,">>receive.htm"); binmode(MYHAN); binmode(MYHAN2); while ($line=<MYHAN>) { chomp($line); $line=~s/\x0d//g; # probably unnecessary $line=~s/\x0a//g; print MYHAN2 $line."testing\x0d\x0a"; } close MYHAN; close MYHAN2; oops there was a typo - I had cut the code from another source but problem remains teh same. > > >The problem is that I get in "receive.txt" I get ending >"balhblahtesting[CR][CR][LF]" where [CR] mean carriage return and [LF] line feed. > >Why is this happening? I've chomped and ~s'd the $line. I've also binmoded both >file handles for good measure.
From: Frank Seitz on 23 Apr 2008 08:00 John wrote: > > The problem is that I get in "receive.txt" I get ending > "balhblahtesting[CR][CR][LF]" where [CR] mean carriage return and [LF] line feed. > > Why is this happening? I've chomped and ~s'd the $line. chomp() removes the value of $/ - i.e. LF on Unix, not CRLF. Frank -- Dipl.-Inform. Frank Seitz; http://www.fseitz.de/ Anwendungen f�r Ihr Internet und Intranet Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
From: Ben Bullock on 23 Apr 2008 08:19 On Wed, 23 Apr 2008 14:31:18 +0300, John wrote: > Why is this happening? I've chomped and ~s'd the $line. I've also > binmoded both file handles for good measure. I rewrote your code as follows and didn't get the error you mention on either Ubuntu Linux or Windows or Cygwin: #!/usr/bin/perl use warnings; use strict; open(MYHAN,"<", "testcrs.pl") or die $!; open(MYHAN2,">", "receive.txt") or die $!; binmode(MYHAN); binmode(MYHAN2); while (my $line=<MYHAN>) { chomp($line); $line=~s/\x0d//g; # probably unnecessary $line=~s/\x0a//g; print MYHAN2 $line." testing R\x0dS\x0aT"; } close MYHAN; close MYHAN2; Note that the "binmode" is essential here - without that what you describe is the expected behaviour on Windows. The most likely cause of the problem is that "open (MYHAN2" ... actually failed and you were looking at an old version of the file before you'd used the "binmode" statement, or perhaps you didn't scroll down far enough (since originally it was appending to receive.txt rather than overwriting it).
From: Ben Bullock on 23 Apr 2008 08:20 On Wed, 23 Apr 2008 14:00:44 +0200, Frank Seitz wrote: > John wrote: >> >> The problem is that I get in "receive.txt" I get ending >> "balhblahtesting[CR][CR][LF]" where [CR] mean carriage return and [LF] >> line feed. >> >> Why is this happening? I've chomped and ~s'd the $line. > > chomp() removes the value of $/ - i.e. LF on Unix, not CRLF. That can't be the solution, because he also used global substitutions to remove any line feeds or carriage returns in the string $line.
|
Next
|
Last
Pages: 1 2 Prev: perl utility Next: FAQ 1.9 How does Perl compare with other languages like Java, Python, REXX, Scheme, or Tcl? |