Home Forums C Programming Help – file reading

Viewing 7 reply threads
  • Author
    Posts
    • #2182
      Ernesto0751
      Participant

      hi,

      can someone give me the idea on how to read the following file (student’s mark text file) using array and then print it out, how would be the design of the code?

      No Matrix quiz1(5%) quiz1(5%) quiz1(5%) Proj(25%) MidT
      1 BK20008 4 3 5 18 18
      2 BK20002 5 5 4 10 8
      3 BK20003 3 4 5 18 10
      4 BK20006 4 3 4 20 14
      5 BK20005 5 4 3 13 17
      6 BK20004 2 5 2 4 16
      7 BK20007 3 4 4 21 14
      8 BK20001 4 3 5 11 15
      9 BK20009 3 2 4 10 10
      10 BK20010 4 3 3 23 18

      i’m not asking for code because this is my project. After reading the file, the program have to calculate the grade and sort them, but first i have to know how to read this file

      any kindly help i will be very appreciate!
      thanks in advance

    • #3529
      JonathaThurston
      Participant

      Are you using C or C++? If its C the following can help.


      fscanf(fileName, "%d [] %d %d %d %d %d", variableName, arrayName, variableName ...);
    • #3530
      Ernesto0751
      Participant
      int main ()
      {
      char matrix[20][200];
      int i, j, no[20], quiz_1[20], quiz_2[20], quiz_3[20], project[20], midT[20];
      FILE *infile;

      infile = fopen("studentsmark.txt","r");

      i=0;

      while( fscanf(infile,"%d %s %d %d %d %d %d",&no, matrix, &quiz_1, &quiz_2, &quiz_3, &project, &midT) !=EOF) i++;



      for(j=0;j {
      printf("%d %s %d %d %d %d %dn",no[j], matrix[j], quiz_1[j], quiz_2[j], quiz_3[j], project[j], midT[j]);
      }

      fclose(infile);
      }#include


      int main ()
      {
      char matrix[20][200];
      int i, j, no[20], quiz_1[20], quiz_2[20], quiz_3[20], project[20], midT[20];
      FILE *infile;

      infile = fopen("studentsmark.txt","r");

      i=0;

      while( fscanf(infile,"%d %s %d %d %d %d %d",&no
      , matrix, &quiz_1, &quiz_2, &quiz_3, &project, &midT) !=EOF) i++;



      for(j=0;j {
      printf("%d %s %d %d %d %d %dn",no[j], matrix[j], quiz_1[j], quiz_2[j], quiz_3[j], project[j], midT[j]);
      }

      fclose(infile);
      }

      but i am unable to read tis line
      No Matrix quiz1(5%) quiz1(5%) quiz1(5%) Proj(25%) MidT(20%)

      what should i add to make the program read it and ignore it so it can read on the real data i need, i really have no idea…

    • #3531
      Ernesto0751
      Participant
      int main ()
      {
      char matrix[20][200];
      int i, j, no[20], quiz_1[20], quiz_2[20], quiz_3[20], project[20], midT[20];
      FILE *infile;

      infile = fopen("studentsmark.txt","r");

      i=0;

      while( fscanf(infile,"%d %s %d %d %d %d %d",&no, matrix, &quiz_1, &quiz_2, &quiz_3, &project, &midT) !=EOF) i++;



      for(j=0;j {
      printf("%d %s %d %d %d %d %dn",no[j], matrix[j], quiz_1[j], quiz_2[j], quiz_3[j], project[j], midT[j]);
      }

      fclose(infile);
      }#include


      int main ()
      {
      char matrix[20][200];
      int i, j, no[20], quiz_1[20], quiz_2[20], quiz_3[20], project[20], midT[20];
      FILE *infile;

      infile = fopen("studentsmark.txt","r");

      i=0;

      while( fscanf(infile,"%d %s %d %d %d %d %d",&no
      , matrix, &quiz_1, &quiz_2, &quiz_3, &project, &midT) !=EOF) i++;



      for(j=0;j {
      printf("%d %s %d %d %d %d %dn",no[j], matrix[j], quiz_1[j], quiz_2[j], quiz_3[j], project[j], midT[j]);
      }

      fclose(infile);
      }

      but i am unable to read tis line
      No Matrix quiz1(5%) quiz1(5%) quiz1(5%) Proj(25%) MidT(20%)

      what should i add to make the program read it and ignore it so it can read on the real data i need, i really have no idea…

    • #3532
      msaqib
      Participant

      Use fgets() function to read the file line by line and then split the string and store all the values in variables.


      int x = 0;
      while (fgets(msg,25,fp)!=NULL)
      {
      x++;
      if(x==0){
      //we do not need to read first line as it contians headings
      //this is the first line which you don't need to read and you can hardcode it in progrm
      }
      else{
      //write your rest of the program here to read the data and manipulate
      }

      }
    • #3533
      Ernesto0751
      Participant

      thanks! i hav been thinking the whole day for this. I will try working on it !

    • #3534
      Ernesto0751
      Participant

      now my program able to read the file by adding some code given by you, but i couldnt understand how it actually run..

      #include 


      void main (void)
      {
      char matrix[20][200], line[100][100];
      int i, j, x, no[20], quiz_1[20], quiz_2[20], quiz_3[20], project[20], midT[20], final[20];
      FILE *infile;

      infile = fopen("studentsmark.txt","r");

      x=0;
      while (fgets(line,100,infile)!=NULL)
      {

      x++;
      if(x==1)
      {

      }

      else{
      i=0;
      while( fscanf(infile,"%d %s %d %d %d %d %d %d",&no,matrix, &quiz_1, &quiz_2, &quiz_3, &project, &midT, &final) !=EOF)



      printf("%d %s %d %d %d %d %d %dn",no
      , matrix, quiz_1, quiz_2, quiz_3, project, midT, final);
      i++;




      }

      }
      fclose(infile);
      }

      this is my actual input file

      123401234567890123456789012345678901234567890123456789012345678901234567890123456789
      No Matrix quiz1(5%) quiz1(5%) quiz1(5%) Proj(25%) MidT(20%) Final(40%)
      1 BK20008 4 3 5 18 18 36
      2 BK20002 5 5 4 10 8 30
      3 BK20003 3 4 5 18 10 35
      4 BK20006 4 3 4 20 14 36
      5 BK20005 5 4 3 13 17 28
      6 BK20004 2 5 2 4 16 10
      7 BK20007 3 4 4 21 14 32
      8 BK20001 4 3 5 11 15 31
      9 BK20009 3 2 4 10 10 20
      10 BK20010 4 3 3 23 18 22

      there is a line of number in the input file.can you explain to me? thanks!

    • #3535
      msaqib
      Participant

      The code

      while (fgets(line,100,infile)!=NULL)

      reads the file and function fgets() reads the file line by line. So when the program reads first line, it skips the first line of records which is
      No Matrix quiz1(5%) quiz1(5%) quiz1(5%) Proj(25%) MidT(20%) Final(40%)
      and is done by this code:

      if(x==1)
      {

      }

      And you read all the marks and data in else part of the program.

      else{
      i=0;
      while( fscanf(infile,"%d %s %d %d %d %d %d %d",&no,matrix, &quiz_1, &quiz_2, &quiz_3, &project, &midT, &final) !=EOF)
      printf("%d %s %d %d %d %d %d %dn",no
      , matrix, quiz_1, quiz_2, quiz_3, project, midT, final);
      i++;
      }
Viewing 7 reply threads
  • The forum ‘C Programming’ is closed to new topics and replies.