Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7825205
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 2, 20262026-06-02T08:52:24+00:00 2026-06-02T08:52:24+00:00

I need to validate that a text file is in CSV format (i.e. that

  • 0

I need to validate that a text file is in CSV format (i.e. that each digit is separated by a comma).

From reading online, it seems that people have conflicting views about it – but is Strtok() the best way to do this?

Any help would be great.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-02T08:52:27+00:00Added an answer on June 2, 2026 at 8:52 am

    Your input seems so easy that I would probably just use a loop around fgetc(3); I’ll sketch some pseudo-code here:

    fd = fopen("file", "r");
    int c;
    while((c=fgetc(fd)) != EOF) {
        switch(c) {
            case '0':
            case '1':
            /* so on */
            case '9':
                handle_digit(c);
                break;
            case ',':
                handle_comma();
                break;
            case '\n':
                handle_newline();
                break;
            default:
                fprintf(stderr, "mistaken input %c\n", c);
                break;
        }
    }
    fclose(fd);
    

    You’ll have to manage the input in the functions in a manner that may be a bit awkward if you’re used to higher-level languages such as Ruby or Python where you’d just run line.split(',') to get a list of numbers, but that is pretty idiomatic C.

    Of course, if this were a real problem, I’d probably prefer flex and bison, and write a tiny lexer and grammar, mostly because it would be a lot easier to extend in the future as needs change.


    Update

    With some additional criteria to check, the handle_{digit,comma,newline}() routines are easier to sketch. I’ll sketch using global variables, but you could just as easily stuff these into a struct and pass them around from function to function:

    enum seen {
        NEWLINE,
        COMMA,
        DIGIT,
    };
    
    enum seen last_seen = NEWLINE;
    
    handle_digit(int c) {
        if (last_seen == DIGIT) {
            /* error if numbers cannot have multiple digits
               or construct a larger number if numbers can have
               multiple digits */
        } else if (last_seen == COMMA || last_seen == NEWLINE) {
            /* start a new entry */
        }
        last_seen = DIGIT;
    }
    
    handle_comma() {
        if (last_seen == COMMA) {
            /* error */
        } else if (last_seen == NEWLINE) {
            /* error */
        } else if (last_seen == DIGIT) {
            /* end previous field */
        }
        last_seen = COMMA;
    }
    
    handle_newline() {
        if (last_seen == NEWLINE) {
            /* error */
        } else if (last_seen == COMMA) {
            /* error */
        } else if (last_seen == DIGIT) {
            /* end previous field */
        }
        last_seen = NEWLINE;
    }
    

    Add whichever checks you need to validate the contents according to whichever rules you have. You might wish to standardize the order and contents of the tests to ensure that you never forget one, even if it means you write a /* nop */ comment once or twice to remind yourself that something is fine.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a text file having words that i need to validate. After following
I'll be getting text from a user that I need to validate is a
I need to validate that the user entered text in the format: ####-#####-####-### Can
I need to generate windows form fields based off of a text file that
I need to validate that the text entered in a qlineedit has the form
I have a text box I need to validate that.. I mean user can
I don't need to validate that the IP address is reachable or anything like
I need to validate a basic authorization header that is being sent to my
I have a regular expression ( \d{4}\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2} ) that I need to validate the
I need a regular expression that should validate decimal point as well as range.

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.