Advertisement
Guest User

Untitled

a guest
Apr 24th, 2018
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.09 KB | None | 0 0
  1. #define SIZE_OF_BUF 50
  2. #include <stdio.h>
  3. void printLen(FILE *fin, char * buf, long int len, long int offset)
  4. {
  5.     fseek(fin, offset, SEEK_SET);
  6.     long int bufend = 0;
  7.     long int sum = 0;
  8.     int i;
  9.     while (SIZE_OF_BUF + sum < len)
  10.     {
  11.         bufend = fread(buf, sizeof(char), SIZE_OF_BUF, fin);
  12.         for(i = 0; i<bufend; i++)
  13.             printf("%c", buf[i]);
  14.         sum+=bufend;
  15.  
  16.     }
  17.     fread(buf, sizeof(char), len - sum, fin);
  18.     for(i = 0; i < len - sum; i++)
  19.         printf("%c", buf[i]);
  20.     printf("\n");
  21. }
  22. int main()
  23. {
  24.     FILE *fin = fopen("lab5text", "r");
  25.    
  26.     if (fin == NULL)
  27.     {
  28.         perror("Can not open file");
  29.         return 0;
  30.     }
  31.  
  32.     char buf[SIZE_OF_BUF] = {0};
  33.     long int posofnextl[100] = {0};
  34.     int numofnextl = 0;
  35.     long int curpos = 0;
  36.  
  37.     size_t bufend;
  38.     while ((bufend = fread(&buf, sizeof(char), SIZE_OF_BUF, fin)) != 0)
  39.     {
  40.         int i = 0;
  41.         for (; i < bufend; i++)
  42.         {
  43.             if ((buf[i] == '\n'))
  44.             {
  45.                 posofnextl[numofnextl] = curpos + i;
  46.                 numofnextl++;
  47.             }  
  48.         }
  49.        
  50.         if((bufend < SIZE_OF_BUF) && (buf[bufend - 1] != '\n'))
  51.         {
  52.             posofnextl[numofnextl] = curpos + i;
  53.             numofnextl++;
  54.         }
  55.         curpos+=bufend;
  56.     }
  57.  
  58.     if (numofnextl == 0)
  59.     {
  60.         printf("File is empty \n");
  61.         return 0;
  62.     }
  63.  
  64.     int i = 0;
  65.     /*for (; i < numofnextl; i++)
  66.     {
  67.         printf("%li ", posofnextl[i]);
  68.     }*/
  69.  
  70.     long int lenghts[100] = {0};
  71.     lenghts[0] = posofnextl[0];
  72.     for (i = 1; i < numofnextl; i++)
  73.     {
  74.         lenghts[i] = posofnextl[i] - posofnextl[i-1] - 1;
  75.     }
  76.  
  77.     /*printf("\n");
  78.     for (i = 0; i < numofnextl; i++)
  79.     {
  80.         printf("%li ", lenghts[i]);
  81.     }*/
  82.  
  83.     long int offsets[100] = {0};
  84.     offsets[0] = 0;
  85.     for(i = 1; i < numofnextl; i++)
  86.     {
  87.         offsets[i] = offsets[i-1] + lenghts[i-1] + 1;
  88.     }
  89.  
  90.     /*printf("\n");
  91.     for (i = 0; i < numofnextl; i++)
  92.     {
  93.         printf("%li ", offsets[i]);
  94.     }
  95.  
  96.     printf("\n");*/
  97.  
  98.     int numberofstr = 0;
  99.  
  100.     while (scanf("%d", &numberofstr))
  101.     {
  102.         if (numberofstr == 0)
  103.             break;
  104.         if((numberofstr<=numofnextl) && (numberofstr >0))
  105.         {
  106.             printLen(fin, buf, lenghts[numberofstr-1], offsets[numberofstr-1]);
  107.         }
  108.         else
  109.         {
  110.             printf("Wrong number of str\n");
  111.         }
  112.     }
  113.    
  114.  
  115.     fclose(fin);
  116.     return 0;
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement