Carriage Returns

Discussion in 'C Programming' started by Nimmy, Oct 9, 2003.

  1. Nimmy

    Nimmy Guest

    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
    Nimmy, Oct 9, 2003
    #1
    1. Advertising

  2. Nimmy <> 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 () ---------------------------\
    | 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
    Joona I Palaste, Oct 9, 2003
    #2
    1. Advertising

  3. On Thu, 9 Oct 2003, Joona I Palaste wrote:

    > Nimmy <> 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.

    --
    =?ISO-8859-1?Q?Johan_Aur=E9r?=, Oct 9, 2003
    #3
  4. Nimmy

    Dan Pop Guest

    In <bm3cip$h11$> Joona I Palaste <> writes:

    >Nimmy <> 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:
    Dan Pop, Oct 9, 2003
    #4
  5. Johan Aurér <> scribbled the following:
    > On Thu, 9 Oct 2003, Joona I Palaste wrote:
    >> Nimmy <> 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 () ---------------------------\
    | 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
    Joona I Palaste, Oct 9, 2003
    #5
  6. Greetings.

    In article <bm3blq$ibt$>, 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
    Tristan Miller, Oct 9, 2003
    #6
  7. Nimmy

    Default User Guest

    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
    Default User, Oct 9, 2003
    #7
  8. Dan Pop <> scribbled the following:
    > In <bm3cip$h11$> Joona I Palaste <> writes:
    >>Nimmy <> 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 () ---------------------------\
    | 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
    Joona I Palaste, Oct 9, 2003
    #8
  9. Dan Pop wrote:
    >
    > In <bm3cip$h11$> Joona I Palaste <> writes:
    >
    > >Nimmy <> 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 |
    +----------------------------------------------------------------+
    Charles Richmond, Oct 9, 2003
    #9
  10. Tristan Miller wrote:
    >
    > Greetings.
    >
    > In article <bm3blq$ibt$>, 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 |
    +----------------------------------------------------------------+
    Charles Richmond, Oct 9, 2003
    #10
  11. On Thu, 09 Oct 2003 13:52:05 +0200, in comp.lang.c , Tristan Miller
    <> wrote:

    >Greetings.
    >
    >In article <bm3blq$ibt$>, 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 =---
    Mark McIntyre, Oct 9, 2003
    #11
  12. Nimmy

    Dan Pop Guest

    In <> Charles Richmond <> writes:

    >Dan Pop wrote:
    >>
    >> In <bm3cip$h11$> Joona I Palaste <> writes:
    >>
    >> >Nimmy <> 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:
    Dan Pop, Oct 10, 2003
    #12
  13. Nimmy

    Dan Pop Guest

    In <bm48rs$43g$> Joona I Palaste <> writes:

    >Dan Pop <> 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:
    Dan Pop, Oct 10, 2003
    #13
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Iceberg

    Carriage Returns and sockets

    Iceberg, Sep 6, 2003, in forum: Perl
    Replies:
    1
    Views:
    1,122
    Iceberg
    Sep 6, 2003
  2. Schroeder
    Replies:
    1
    Views:
    514
    Jim Gibson
    Jan 26, 2005
  3. Mario Vargas

    Replacing Carriage Returns in VB.NET

    Mario Vargas, Oct 21, 2003, in forum: ASP .Net
    Replies:
    3
    Views:
    14,433
    Dragos Marian Barbu
    Nov 10, 2003
  4. Brian
    Replies:
    1
    Views:
    290
    Craig Deelsnyder
    Jun 17, 2004
  5. Steve Anderson
    Replies:
    3
    Views:
    230
    Steve Anderson
    Jun 21, 2004
Loading...

Share This Page