By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
435,099 Members | 2,144 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,099 IT Pros & Developers. It's quick & easy.

Carriage Returns

P: n/a
Hi,

I have a data file and I want to remove Carriage returns. Any one has any C
code/program which does this? I am working on Windows XP machine.....I don't
have access to UNIX machine. But I need to send this data file to the Unix
machine once I remove the carriage retunrns from my XP machine.

Thanks
Nov 13 '05 #1
Share this Question
Share on Google+
12 Replies


P: n/a
Nimmy <no****@please.com> scribbled the following:
Hi, I have a data file and I want to remove Carriage returns. Any one has any C
code/program which does this? I am working on Windows XP machine.....I don't
have access to UNIX machine. But I need to send this data file to the Unix
machine once I remove the carriage retunrns from my XP machine.


Here's a simple filter-type program.

#include <stdio.h>
int main(void) {
int cr = '\r'; /* the code for carriage return */
int c;
while ((c = getchar()) != EOF) {
if (c != cr) {
putchar(c);
}
}
return 0;
}

Simply redirect stdin from the file you want to remove carriage
returns from and redirect stdout to the new file.

--
/-- Joona Palaste (pa*****@cc.helsinki.fi) ---------------------------\
| Kingpriest of "The Flying Lemon Tree" G++ FR FW+ M- #108 D+ ADA N+++|
| http://www.helsinki.fi/~palaste W++ B OP+ |
\----------------------------------------- Finland rules! ------------/
"You will be given the plague."
- Montgomery Burns
Nov 13 '05 #2

P: n/a
On Thu, 9 Oct 2003, Joona I Palaste wrote:
Nimmy <no****@please.com> scribbled the following:
Hi,

I have a data file and I want to remove Carriage returns. Any one has any C
code/program which does this? I am working on Windows XP machine.....I don't
have access to UNIX machine. But I need to send this data file to the Unix
machine once I remove the carriage retunrns from my XP machine.


Here's a simple filter-type program.

#include <stdio.h>
int main(void) {
int cr = '\r'; /* the code for carriage return */
int c;
while ((c = getchar()) != EOF) {
if (c != cr) {
putchar(c);
}
}
return 0;
}

Simply redirect stdin from the file you want to remove carriage
returns from and redirect stdout to the new file.


No, both stdin and stdout are text streams by default. A one-to-one
correspondence between the characters of a text stream and the
external representation is not mandated by the standard. You need to
use binary streams.

--
au***@axis.com
Nov 13 '05 #3

P: n/a
Johan Aurér <au***@axis.com> scribbled the following:
On Thu, 9 Oct 2003, Joona I Palaste wrote:
Nimmy <no****@please.com> scribbled the following:
> Hi,
> I have a data file and I want to remove Carriage returns. Any one has any C
> code/program which does this? I am working on Windows XP machine.....I don't
> have access to UNIX machine. But I need to send this data file to the Unix
> machine once I remove the carriage retunrns from my XP machine.


Here's a simple filter-type program.

#include <stdio.h>
int main(void) {
int cr = '\r'; /* the code for carriage return */
int c;
while ((c = getchar()) != EOF) {
if (c != cr) {
putchar(c);
}
}
return 0;
}

Simply redirect stdin from the file you want to remove carriage
returns from and redirect stdout to the new file.

No, both stdin and stdout are text streams by default. A one-to-one
correspondence between the characters of a text stream and the
external representation is not mandated by the standard. You need to
use binary streams.


Whoops. Serves me right for only ever testing this program on UNIX,
which makes no distinction between text and binary streams. Thanks for
the correction.

--
/-- Joona Palaste (pa*****@cc.helsinki.fi) ---------------------------\
| Kingpriest of "The Flying Lemon Tree" G++ FR FW+ M- #108 D+ ADA N+++|
| http://www.helsinki.fi/~palaste W++ B OP+ |
\----------------------------------------- Finland rules! ------------/
"B-but Angus! You're a dragon!"
- Mickey Mouse
Nov 13 '05 #4

P: n/a
Greetings.

In article <bm**********@kermit.esat.net>, Nimmy wrote:
I have a data file and I want to remove Carriage returns. Any one has any
C code/program which does this? I am working on Windows XP machine.....I
don't have access to UNIX machine. But I need to send this data file to
the Unix machine once I remove the carriage retunrns from my XP machine.


How are you sending it to the Unix machine? Many FTP and other file
transfer programs include options which automatically convert text files
between DOS/Unix/Mac formats. A sufficiently powerful programmer's editor
(e.g., (X)Emacs, UltraEdit) should also do this for you automatically. No
need to reinvent the wheel.

--
_
_V.-o Tristan Miller [en,(fr,de,ia)] >< Space is limited
/ |`-' -=-=-=-=-=-=-=-=-=-=-=-=-=-=-= <> In a haiku, so it's hard
(7_\\ http://www.nothingisreal.com/ >< To finish what you
Nov 13 '05 #5

P: n/a
In <bm**********@oravannahka.helsinki.fi> Joona I Palaste <pa*****@cc.helsinki.fi> writes:
Nimmy <no****@please.com> scribbled the following:
I have a data file and I want to remove Carriage returns. Any one has any C
code/program which does this? I am working on Windows XP machine.....I don't
have access to UNIX machine. But I need to send this data file to the Unix ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ machine once I remove the carriage retunrns from my XP machine.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^Here's a simple filter-type program.

#include <stdio.h>
int main(void) {
int cr = '\r'; /* the code for carriage return */
int c;
while ((c = getchar()) != EOF) {
if (c != cr) {
putchar(c);
}
}
return 0;
}

Simply redirect stdin from the file you want to remove carriage
returns from and redirect stdout to the new file.


Had you engaged your brain, you'd have realised that your filter is
useless for its intended purpose: stdin being a text stream, it won't
see any CR character that is part of a CR+LF pair: such pairs are simply
mapped to a '\n' character, when read from a text stream on a Windows
platform. Furthermore, when you output a '\n' character, the C runtime
system will turn it into a CR+LF pair.

Of course, your program would work on a Unix system, but the OP wants
to perform the conversion on the Windows side. The solution is
incredibly simple, assuming that argv[1] contains the input file name and
argv[2] the output file name. All error checking deliberately omitted:

int c;
FILE *in = fopen(argv[1], "r"), *out = fopen(argv[2], "wb");

while ((c = getc(in)) != EOF) putc(c, out);

Any CR that is part of a CR+LF pair will be automatically removed by the
C runtime system, because the input file is opened in text mode. The
opposite operation is not going to happen, because the output file is
opened in binary mode.

And you probably don't want to filter any CR that is not part of a CR+LF
pair...

As a last remark, if the file is sent using the FTP protocol, the
conversion will be automatically performed, if the transfer is made in
text mode.

Dan
--
Dan Pop
DESY Zeuthen, RZ group
Email: Da*****@ifh.de
Nov 13 '05 #6

P: n/a
Tristan Miller wrote:
How are you sending it to the Unix machine? Many FTP and other file
transfer programs include options which automatically convert text files
between DOS/Unix/Mac formats. A sufficiently powerful programmer's editor
(e.g., (X)Emacs, UltraEdit) should also do this for you automatically. No
need to reinvent the wheel.

There are also utilities that can do the transformation, dos2unix and
such.

Brian Rodenborn
Nov 13 '05 #7

P: n/a
Dan Pop <Da*****@cern.ch> scribbled the following:
In <bm**********@oravannahka.helsinki.fi> Joona I Palaste <pa*****@cc.helsinki.fi> writes:
Nimmy <no****@please.com> scribbled the following:
I have a data file and I want to remove Carriage returns. Any one has any ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^
C code/program which does this? I am working on Windows XP machine.....I don't
have access to UNIX machine. But I need to send this data file to the Unix ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ machine once I remove the carriage retunrns from my XP machine. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^
Here's a simple filter-type program.

(snip source code)
Simply redirect stdin from the file you want to remove carriage
returns from and redirect stdout to the new file.


(snip Dan's quite well warranted criticism)
Any CR that is part of a CR+LF pair will be automatically removed by the
C runtime system, because the input file is opened in text mode. The
opposite operation is not going to happen, because the output file is
opened in binary mode. And you probably don't want to filter any CR that is not part of a CR+LF
pair...


Why? If we're being pedantic here, there was nothing in the OP's
request that indicated we would be dealing with a text file.

--
/-- Joona Palaste (pa*****@cc.helsinki.fi) ---------------------------\
| Kingpriest of "The Flying Lemon Tree" G++ FR FW+ M- #108 D+ ADA N+++|
| http://www.helsinki.fi/~palaste W++ B OP+ |
\----------------------------------------- Finland rules! ------------/
"I will never display my bum in public again."
- Homer Simpson
Nov 13 '05 #8

P: n/a
Dan Pop wrote:

In <bm**********@oravannahka.helsinki.fi> Joona I Palaste <pa*****@cc.helsinki.fi> writes:
Nimmy <no****@please.com> scribbled the following:
I have a data file and I want to remove Carriage returns. Any one has any C
code/program which does this? I am working on Windows XP machine.....I don't
have access to UNIX machine. But I need to send this data file to the Unix ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ machine once I remove the carriage retunrns from my XP machine.

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^
Here's a simple filter-type program.

#include <stdio.h>
int main(void) {
int cr = '\r'; /* the code for carriage return */
int c;
while ((c = getchar()) != EOF) {
if (c != cr) {
putchar(c);
}
}
return 0;
}

Simply redirect stdin from the file you want to remove carriage
returns from and redirect stdout to the new file.


Had you engaged your brain, you'd have realised that your filter is
useless for its intended purpose: stdin being a text stream, it won't
see any CR character that is part of a CR+LF pair: such pairs are simply
mapped to a '\n' character, when read from a text stream on a Windows
platform. Furthermore, when you output a '\n' character, the C runtime
system will turn it into a CR+LF pair.

So just use "freopen()" to change "stdin" and "stdout"
to binary mode. Then you can continue to use "getchar()"
and "putchar()"...

--
+----------------------------------------------------------------+
| Charles and Francis Richmond richmond at plano dot net |
+----------------------------------------------------------------+
Nov 13 '05 #9

P: n/a
Tristan Miller wrote:

Greetings.

In article <bm**********@kermit.esat.net>, Nimmy wrote:
I have a data file and I want to remove Carriage returns. Any one has any
C code/program which does this? I am working on Windows XP machine.....I
don't have access to UNIX machine. But I need to send this data file to
the Unix machine once I remove the carriage retunrns from my XP machine.


How are you sending it to the Unix machine? Many FTP and other file
transfer programs include options which automatically convert text files
between DOS/Unix/Mac formats. A sufficiently powerful programmer's editor
(e.g., (X)Emacs, UltraEdit) should also do this for you automatically. No
need to reinvent the wheel.

Or BBEdit on the Macintosh...

--
+----------------------------------------------------------------+
| Charles and Francis Richmond richmond at plano dot net |
+----------------------------------------------------------------+
Nov 13 '05 #10

P: n/a
On Thu, 09 Oct 2003 13:52:05 +0200, in comp.lang.c , Tristan Miller
<ps********@nothingisreal.com> wrote:
Greetings.

In article <bm**********@kermit.esat.net>, Nimmy wrote:
I have a data file and I want to remove Carriage returns. Any one has any
C code/program which does this? I am working on Windows XP machine.....I
don't have access to UNIX machine. But I need to send this data file to
the Unix machine once I remove the carriage retunrns from my XP machine.
How are you sending it to the Unix machine? Many FTP and other file
transfer programs include options which automatically convert text files
between DOS/Unix/Mac formats.


And if they don't they need a jolly good slapping.
A sufficiently powerful programmer's editor
(e.g., (X)Emacs, UltraEdit) should also do this for you automatically.


Even Windows Wordpad can do this.

--
Mark McIntyre
CLC FAQ <http://www.eskimo.com/~scs/C-faq/top.html>
CLC readme: <http://www.angelfire.com/ms3/bchambless0/welcome_to_clc.html>
----== Posted via Newsfeed.Com - Unlimited-Uncensored-Secure Usenet News==----
http://www.newsfeed.com The #1 Newsgroup Service in the World! >100,000 Newsgroups
---= 19 East/West-Coast Specialized Servers - Total Privacy via Encryption =---
Nov 13 '05 #11

P: n/a
In <3F***************@comcast.net> Charles Richmond <ri******@comcast.net> writes:
Dan Pop wrote:

In <bm**********@oravannahka.helsinki.fi> Joona I Palaste <pa*****@cc.helsinki.fi> writes:
>Nimmy <no****@please.com> scribbled the following:
>
>> I have a data file and I want to remove Carriage returns. Any one has any C
>> code/program which does this? I am working on Windows XP machine.....I don't
>> have access to UNIX machine. But I need to send this data file to the Unix

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> machine once I remove the carriage retunrns from my XP machine.

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^
>Here's a simple filter-type program.
>
>#include <stdio.h>
>int main(void) {
> int cr = '\r'; /* the code for carriage return */
> int c;
> while ((c = getchar()) != EOF) {
> if (c != cr) {
> putchar(c);
> }
> }
> return 0;
>}
>
>Simply redirect stdin from the file you want to remove carriage
>returns from and redirect stdout to the new file.


Had you engaged your brain, you'd have realised that your filter is
useless for its intended purpose: stdin being a text stream, it won't
see any CR character that is part of a CR+LF pair: such pairs are simply
mapped to a '\n' character, when read from a text stream on a Windows
platform. Furthermore, when you output a '\n' character, the C runtime
system will turn it into a CR+LF pair.

So just use "freopen()" to change "stdin" and "stdout"
to binary mode. Then you can continue to use "getchar()"
and "putchar()"...


Think harder...

freopen() has the nasty habit of first closing the old stream (which a
filter program cannot afford to do) and, in its pre-C99 incarnations,
of requiring a valid file name.

Dan
--
Dan Pop
DESY Zeuthen, RZ group
Email: Da*****@ifh.de
Nov 13 '05 #12

P: n/a
In <bm**********@oravannahka.helsinki.fi> Joona I Palaste <pa*****@cc.helsinki.fi> writes:
Dan Pop <Da*****@cern.ch> scribbled the following:
And you probably don't want to filter any CR that is not part of a CR+LF
pair...


Why? If we're being pedantic here, there was nothing in the OP's
request that indicated we would be dealing with a text file.


The mere words "carriage return" indicate a text file. '\r' becomes
devoid of any special meaning when output to a binary stream.

Dan
--
Dan Pop
DESY Zeuthen, RZ group
Email: Da*****@ifh.de
Nov 13 '05 #13

This discussion thread is closed

Replies have been disabled for this discussion.