[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 299
  • Last Modified:

txt files

I want to be able to read off of a text file but not the whole thing at one time. I want to be able to choose what i want to use.
This is what i have. A loop but it prints everything out.
my text file has...

5(number of people)
Josh
300.00
1955
Alvin
300.00
1956
Chad
300.00
1966
Ben
300.00
1968
Arnold
300.00
1970


#include<stdio.h>

int main()
{
    FILE *f;
    char file_txt[1024];
    f = fopen("output.txt", "r");
    
    while ( fgets(file_txt, sizeof(file_txt), f) != NULL )
    {
        fprintf(stderr,"%s", file_txt);
    }

    fclose(f);

    return 0;
}

Open in new window

0
HelpMeMaggi
Asked:
HelpMeMaggi
  • 4
  • 3
1 Solution
 
ozoCommented:
how would you want to make the choice and how would you want to use the text?
0
 
HelpMeMaggiAuthor Commented:
Well lets say i want to get all the names on one single line when i print them out. Or all the years on one line.
What i want to print out is "Josh owes me 300.00 since 1955."
and i want to print out the rest of the people the same.
0
 
prerakshethCommented:
You should do the following (assuming you have correct formatting for your file ensured)

- create an int variable state - it can have three possible values: NAME, AMOUNT, SINCE (defined as say 0, 1, 2)
- initially set the state to NAME
- within the read loop, discard everything before first name
- now apply following logic in the loop
    - check the state
    - if state = NAME read line and store in local var name and set state to AMOUNT
    - if state = AMOUNT read line and store in local var amount and set state to SINCE
    - if state = SINCE read the line, store in local var since, print to your output file and change state to NAME
- Repeat above till you finish the file!
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
prerakshethCommented:
More clarified description

- create an int variable state - it can have three possible values: NAME, AMOUNT, SINCE (defined as say 0, 1, 2)
- initially set the state to NAME
- within the read loop, discard everything before first name
- now apply following logic in the loop
    - check the state (better done using a switch/case on state var)
    - if state = NAME read line and store in local var name and set state to AMOUNT
    - else if state = AMOUNT read line and store in local var amount and set state to SINCE
    - else if state = SINCE read the line, store in local var since, print to your output file and change state to NAME
- Repeat above till you finish the file!
0
 
HelpMeMaggiAuthor Commented:
That is very confusing. I kinda understand it but to be honest i do not understand it.
0
 
HelpMeMaggiAuthor Commented:
How do i get rid of the new line? it makes it print out on different lines.
0
 
prerakshethCommented:
See below if it helps

#include<stdio.h>

// add three lines
#define NAME 0
#define AMOUNT 1
#define SINCE 2

int main()
{
    FILE *f;
    // added var
    int state = NAME;
    char name[80];
    char amount[80];
    char since[80];
    char file_txt[1024];
    f = fopen("output.txt", "r");
   
    // assuming the first line is the first name
    while ( fgets(file_txt, sizeof(file_txt), f) != NULL )
    {
        switch(state){
            case NAME:
                 strcpy(name, file_txt);
                 state = AMOUNT;
                 break;
            case AMOUNT:
                 strcpy(amount, file_txt);
                 state = SINCE;
                 break;
            case SINCE:
                 strcpy(since, file_txt);
                 state = NAME;
                 // or whatever you want to do
                 printf("%s owes %s since %s\n", name, amount, since);
                 break;
        }

    }

    fclose(f);

    return 0;
}
0
 
prerakshethCommented:
It seems there are replies provided, and I believe they are correct ones - the deletion reason is not valid
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 4
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now