Don't like ads? PRO users don't see any ads ;-)
Guest

Scan line add array

By: a guest on Apr 17th, 2012  |  syntax: C  |  size: 1.61 KB  |  hits: 20  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1.  
  2.  
  3. int fscanline(FILE *f, char *buffer) {
  4.         int c, i = 0;
  5.         while( c = getc(f) ) {
  6.                 if( c == '\r' || c == '\n' || c == '\0' || c == EOF ) {
  7.                         buffer[i] = '\0';
  8.                         break;
  9.                 }
  10.                 buffer[i++] = c;
  11.         }
  12.         return i;
  13. }
  14.  
  15. int updateCounters(char *buffer, int *c1, int *c2) {
  16.  
  17.         int d, r = sscanf(buffer, "%d %d", &d, &d);
  18.  
  19.         if( r == 1 ) {
  20.                 (*c1)++;
  21.         }
  22.         if( r == 2 ) {
  23.                 (*c2)++;
  24.                 (*c1)++;
  25.         }
  26.  
  27. }
  28.  
  29. int fileDemo() {
  30.  
  31.  
  32.         int rowsCountOne = 0, rowsCountTwo = 0;
  33.         char buffer[512];
  34.  
  35.         int *rowOne;
  36.         int *rowTwo;
  37.  
  38.         int i = 0;
  39.  
  40.         FILE *f = fopen("d:\\demo.txt", "r");
  41.  
  42.         if( !f ) {
  43.                 printf("Cannot open file\n");
  44.                 return doExit();
  45.         }
  46.  
  47.  
  48.  
  49.         while(fscanline(f, buffer)) {
  50.  
  51.                 int d1, d2, r = sscanf(buffer, "%d %d", &d1, &d2);
  52.  
  53.                 if( r == 2 ) {
  54.                         rowsCountOne++;
  55.                         rowsCountTwo++;
  56.                        
  57.                 } else if ( r == 1 ) {
  58.                         rowsCountOne++;
  59.                 }
  60.  
  61.         }
  62.  
  63.         printf("%i %i\n", rowsCountOne, rowsCountTwo);
  64.  
  65.         rowOne = (int*)malloc(rowsCountOne * sizeof(int));
  66.         rowTwo = (int*)malloc(rowsCountTwo * sizeof(int));
  67.  
  68.         fseek(f, 0, 0);
  69.  
  70.         rowsCountOne = 0;
  71.         rowsCountTwo = 0;
  72.  
  73.         while(fscanline(f, buffer)) {
  74.                 int d1, d2, r = sscanf(buffer, "%d %d", &d1, &d2);
  75.                 if( r == 2 ) {
  76.                         rowOne[rowsCountOne++] = d1;
  77.                         rowTwo[rowsCountTwo++] = d2;                   
  78.                 } else if ( r == 1 ) {
  79.                         rowOne[rowsCountOne++] = d1;
  80.                 }
  81.         }
  82.  
  83.         for( i = 0; i < rowsCountOne; ++i ) {
  84.                 printf("%i ", rowOne[i]);
  85.         } printf("\n");
  86.  
  87.         for( i = 0; i < rowsCountTwo; ++i ) {
  88.                 printf("%i ", rowTwo[i]);
  89.         } printf("\n");
  90.  
  91.  
  92.         free(rowOne);
  93.         free(rowTwo);
  94.  
  95.  
  96.         printf("\n\nOK LA\n");
  97.  
  98.         doExit();
  99. }
  100.  
  101. int main() {
  102.  
  103.         fileDemo();
  104.  
  105.         return 0;
  106.  
  107. }