Advertisement
Guest User

Untitled

a guest
Dec 9th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 13.13 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. /*void deleteTabs(char a[1000][1000], int linii)
  5. {
  6.     int j;
  7.     for(j=0;j<strlen(a[]))
  8. }*/
  9. void deleteStartingSpaces(char *str)
  10. {
  11.   int i;
  12.   for(i=0;i<strlen(str);i++)
  13.     if(*(str+i)==' ')
  14.       strcpy(str,str+1);
  15.     else
  16.       break;
  17. }
  18. void deleteTrailingSpaces(char *str)
  19. {
  20.     char *p=str;
  21.     int length=strlen(p);
  22.  
  23.   while(p[length-1]==' ')
  24.       length--;
  25.  
  26.   p[length-2]='\n';
  27.   p[length-1]='\0';
  28. }
  29. void left_right_limits(int linii, char left[10],char right[10],int *start_line,int *end_line)
  30. {
  31.     if(strlen(left)==0 && strlen(right)==0)
  32.     {
  33.         *start_line=0;
  34.         *end_line=linii;
  35.     }
  36.     if(strlen(left)!=0 && strlen(right)==0)
  37.     {
  38.         *start_line=atoi(left);
  39.         *end_line=linii;
  40.     }
  41.     if(strlen(left)!=0 && strlen(right)!=0)
  42.     {
  43.         *start_line=atoi(left);
  44.         *end_line=atoi(right);
  45.     }
  46.     if(*end_line>linii)
  47.         *end_line=linii;
  48. }
  49. int max_Length(char a[1000][1000], int linii)
  50. {
  51.     int maxLength=0,i;
  52.   for(i=0;i<linii;i++)
  53.   {
  54.    
  55.     if(strlen(a[i])>maxLength)
  56.     {
  57.        
  58.       maxLength=strlen(a[i]);
  59.     }
  60.   }
  61.   return maxLength;
  62. }
  63. int line_Max(char a[1000][1000],int linii)
  64. {
  65.     int lineMax=0,i,maxLength=0;
  66.   for(i=0;i<linii;i++)
  67.     if(strlen(a[i])>maxLength)
  68.     {
  69.         maxLength=strlen(a[i]);
  70.       lineMax=i;
  71.     }
  72.   return lineMax;
  73. }
  74. void alignLeft(char a[1000][1000],int linii,char left[10],char right[10])
  75. {
  76.   int i,j,start_line,end_line,nr=0;
  77.   left_right_limits(linii,left,right,&start_line,&end_line);
  78.   if(start_line==end_line)
  79.   {
  80.     for(j=0;j<strlen(a[start_line]);j++)
  81.       if(a[start_line][j]==' ')
  82.         nr++;
  83.       else
  84.         break;
  85.     memmove(a[start_line],a[start_line]+nr,1000);
  86.   }
  87.   for(i=start_line;i<end_line;i++)
  88.   {
  89.     nr=0;
  90.     if(strlen(a[i])!=1)
  91.     {
  92.      
  93.       for(j=0;j<strlen(a[i]);j++)
  94.         if(a[i][j]==' ')
  95.           nr++;
  96.         else
  97.           break;
  98.     }
  99.       memmove(a[i],a[i]+nr,1000);
  100.      
  101.     }
  102.   }
  103.  
  104. void alignRight(char a[1000][1000],int linii,char left[10],char right[10])
  105. {
  106.   int i,maxLength,linieMax,start_line,end_line;
  107.   left_right_limits(linii,left,right,&start_line,&end_line);
  108.   maxLength=max_Length(a,linii);
  109.   linieMax=line_Max(a,linii);
  110.   if(start_line==end_line)
  111.   {
  112.     while(strlen(a[start_line])<maxLength)
  113.     {
  114.         memmove(a[start_line]+1,a[start_line],strlen(a[start_line]));
  115.         a[start_line][0]=' ';
  116.     }
  117.   }
  118.   if(start_line==end_line)
  119.   {
  120.     memmove(a[start_line]+1,a[start_line],strlen(a[start_line]));
  121.     a[start_line][0]=' ';
  122.   }
  123.   for(i=start_line;i<end_line;i++)
  124.   {
  125.     if(i!=linieMax && strlen(a[i])!=1)
  126.     {
  127.       if(i!=linii-1)
  128.       {
  129.       while(strlen(a[i])<maxLength)
  130.         {
  131.           memmove(a[i]+1,a[i],strlen(a[i]));
  132.           a[i][0]=' ';
  133.         }
  134.       }
  135.       if(i==linii-1)
  136.       {
  137.         while(strlen(a[i])<maxLength)
  138.         {
  139.           memmove(a[i]+1 ,a[i] ,strlen(a[i]) );
  140.           a[i][0]=' ';
  141.         }
  142.       }
  143.     }
  144.   }
  145.  
  146.  
  147. }
  148. void center(char a[1000][1000],int linii,char left[10],char right[10])
  149. {
  150.   int i,maxLength=strlen(a[0]),linieMax=0,start_line,end_line;
  151.   left_right_limits(linii,left,right,&start_line,&end_line);
  152.   maxLength=max_Length(a,linii);
  153.   linieMax=line_Max(a,linii);
  154.   for(i=start_line;i<=end_line;i++)
  155.   {
  156.     int temp;
  157.     temp=strlen(a[i]);
  158.     if(i!=linieMax && temp!=1)
  159.     {
  160.       int val=(maxLength-temp)/2;
  161.       int cont=0;
  162.       if((maxLength-temp)%2==0)
  163.         while(cont<val)
  164.         {
  165.           memmove(a[i]+1,a[i],strlen(a[i]));
  166.           a[i][0]=' ';
  167.           cont++;
  168.         }
  169.       else
  170.         while(cont<val+1)
  171.         {
  172.           memmove(a[i]+1,a[i],strlen(a[i]));
  173.           a[i][0]=' ';
  174.           cont++;
  175.         }
  176.     }
  177.   }
  178. }
  179. void list(char a[1000][1000],int linii,char list_type[10],char separator[10], char left[10], char right[10])
  180. {
  181.   int start_line,end_line,nr=1,i;
  182.   char buff[1000],cont_a='a',cont_A='A';
  183.   left_right_limits(linii,left,right,&start_line,&end_line);
  184.   for(i=start_line;i<=end_line;i++)
  185.   {
  186.     switch(list_type[0])
  187.     {
  188.         case 'n':
  189.         sprintf(buff,"%d%c %s",nr++,separator[0],a[i]);
  190.         memmove(a[i],buff,1000);
  191.         break;
  192.         case 'a':
  193.         sprintf(buff,"%c%c %s",cont_a++,separator[0],a[i]);
  194.         memmove(a[i],buff,1000);
  195.         break;
  196.         case 'A':
  197.         sprintf(buff,"%c%c %s",cont_A++,separator[0],a[i]);
  198.         memmove(a[i],buff,1000);
  199.         break;
  200.         case 'b':
  201.         sprintf(buff,"%c %s",separator[0],a[i]);
  202.         memmove(a[i],buff,1000);
  203.         break;
  204.     }
  205.   }
  206. }
  207. void orderedList(char a[1000][1000],int linii,char list_type[10],char separator[10],char ordering[10], char left[10], char right[10])
  208. {
  209.    
  210.   int start_line,end_line,nr=1,i,j;
  211.   char buff[1000],cont_a='a',cont_A='A';
  212.   left_right_limits(linii,left,right,&start_line,&end_line);
  213.  
  214.  
  215.   //printf("%d\n",start_line );
  216.   //printf("%d\n",end_line );
  217.   //printf("%s\n",ordering );
  218.   if(end_line==linii)
  219.   {
  220.     end_line--;
  221.   }
  222.     for(i=start_line;i<=end_line;i++)
  223.     for(j=i+1;j<=end_line;j++)
  224.     {
  225.         if(a[i][0]=='\n' || a[i][0]=='\0')
  226.             continue;
  227.       if(strcmp(ordering,"a")==0)
  228.       {
  229.         if(strcmp(a[i],a[j])>0)
  230.         {
  231.             char temp[1000];
  232.           strcpy(temp,a[i]);
  233.           strcpy(a[i],a[j]);
  234.           strcpy(a[j],temp);
  235.         }
  236.       }
  237.       else if(strcmp(ordering,"z")==0)
  238.       {
  239.         if(strcmp(a[i],a[j])<0)
  240.         {
  241.             char temp[1000];
  242.             strcpy(temp,a[i]);
  243.             strcpy(a[i],a[j]);
  244.             strcpy(a[j],temp);
  245.         }
  246.       }
  247.       }
  248.   for(i=start_line;i<=end_line;i++)
  249.   {
  250.     switch(list_type[0])
  251.     {
  252.         case 'n':
  253.         sprintf(buff,"%d%c %s",nr++,separator[0],a[i]);
  254.         memmove(a[i],buff,1000);
  255.         break;
  256.         case 'a':
  257.         sprintf(buff,"%c%c %s",cont_a++,separator[0],a[i]);
  258.         memmove(a[i],buff,1000);
  259.         break;
  260.         case 'A':
  261.         sprintf(buff,"%c%c %s",cont_A++,separator[0],a[i]);
  262.         memmove(a[i],buff,1000);
  263.         break;
  264.         case 'b':
  265.         sprintf(buff,"%c %s",separator[0],a[i]);
  266.         memmove(a[i],buff,1000);
  267.         break;
  268.     }
  269.   }
  270. }
  271. void paragraphs( char a[1000][1000],int linii,char tab_size[10],char left[10],char right[10])
  272. {
  273.     int start_line,end_line,i,j;
  274.     int size=atoi(tab_size);
  275.     char spaces[1000], buff[1000];
  276.     left_right_limits(linii,left,right,&start_line,&end_line);
  277.     //printf("%d\n",start_line );
  278.     //printf("%d\n",end_line );
  279.     //printf("size%d\n",size );
  280.    
  281.     for(j=0;j<size;j++)
  282.         spaces[j]=' ';
  283.     //printf("%s\n",a[start_line] );
  284.     for(i=start_line;i<=end_line;i++)
  285.     {
  286.         if(strlen(a[i-1])==1 || i==0)
  287.         {
  288.            
  289.             sprintf(buff,"%s%s",spaces,a[i] );
  290.             memmove(a[i],buff,strlen(buff));
  291.  
  292.         }
  293.         //strcpy(a[i],spaces);
  294.     }
  295.  
  296. }
  297. /*void justify(char a[1000][1000],int linii,char left[10],char right[10])
  298. {
  299.     int start_line,end_line,i,maxLength,j,ok=0;
  300.     left_right_limits(linii,left,right,&start_line,&end_line);
  301.     maxLength=max_Length(a,linii);
  302.     //linieMax=line_Max(a,linii);
  303.     //printf("%d\n",maxLength );
  304.     //printf("%d\n",linieMax );
  305.     for(i=start_line;i<=end_line;i++)
  306.     {
  307.         while(strlen(a[i])<maxLength)
  308.         {
  309.             for(j=0;j<strlen(a[i]);j++)
  310.                 if(a[i][j]==' ')
  311.                 {
  312.                     memmove(a[i]+j+1,a[i]+j,strlen(a[i]));
  313.                     a[i][j]=' ';
  314.                     j++;
  315.                 }
  316.                 if(strlen(a[i])==maxLength)
  317.                 {
  318.                     ok=1;
  319.                     break;
  320.                 }
  321.                 if(ok==1)
  322.                     break;
  323.         }
  324.     }
  325. }*/
  326. void wrap(char a[1000][1000],int *linii,char max_line_length[10])
  327. {
  328.   int i,j;
  329.   char buff[1000*1000];
  330.   int line_length=atoi(max_line_length);
  331.   for(i=0;i<=*linii;i++)
  332.   {
  333.     if(strlen(a[i])>1)
  334.     {
  335.       strcpy(a[i]+strlen(a[i])-1,a[i]+strlen(a[i]));
  336.       strcat(buff,a[i]);
  337.       if(strlen(a[i])<line_length && a[i][strlen(a[i])-1]!=' ') {
  338.         if (a[i][strlen(a[i])]!='\n' && a[i+1][0]!='\n')
  339.           strcat(buff," ");
  340.       }
  341.     }
  342.     else if(i==*linii)
  343.     {
  344.       strcat(buff,"\n");
  345.      
  346.     }
  347.     else
  348.     {
  349.       strcat(buff,"\n");
  350.       strcat(buff,"\n");
  351.     }
  352.  
  353.   }
  354.   //puts(buff);
  355.  
  356.   int end=line_length;
  357.   int start=0;
  358.   for(j=0;j<strlen(buff);j++)
  359.   {
  360.     //printf("%d\n", end);
  361.     //printf("%d, virgula %d\n",end, strlen(buff) );
  362.     if(j==end)
  363.     {
  364.  
  365.       if(buff[end]!=' ')
  366.       {
  367.         //printf("%c\n", buff[end]);
  368.         while(1)
  369.         {
  370.           end--;
  371.           //printf("%d\n", end);
  372.           if(buff[end]==' ')
  373.             break;
  374.  
  375.         }
  376.       buff[end]='\n';
  377.       start=end+1;
  378.       j=end+1;
  379.       end=start+line_length;
  380.       }
  381.       else
  382.       {
  383.         buff[end]='\n';
  384.         start=end+1;
  385.         j=end+1;
  386.         end=start+line_length;
  387.       }
  388.     }
  389.     if(buff[j]=='\n' && buff[j+1]=='\n')
  390.     {
  391.       start=j+2;
  392.       end=start+line_length;
  393.     }
  394.     else
  395.       if(buff[j]=='\n')
  396.       {
  397.         start=j+1;
  398.         end=start+line_length;
  399.       }
  400.   }
  401.   //puts(buff);
  402.   for(i=0;i<strlen(buff);i++)
  403.     if(buff[i]=='\n' && buff[i+1]==' ')
  404.       memmove(&buff[i+1],&buff[i+2],strlen(buff)-i);
  405.   for(i=0;i<*linii;i++)
  406.     memset(&a[i][0], 0, sizeof(a[i]));
  407.   i=0;
  408.   int k=0;
  409.   for(j=0;j<strlen(buff);j++)
  410.   {
  411.     if(buff[j]!='\n')
  412.     {
  413.  
  414.       a[i][k++]=buff[j];
  415.  
  416.     }
  417.     else
  418.     {
  419.  
  420.       strcat(a[i],"\n");
  421.       i++;
  422.  
  423.       k=0;
  424.     }
  425.  
  426.   }
  427.  
  428.   *linii=i;
  429.   //printf("%d\n",*linii );
  430.   deleteTrailingSpaces(a[*linii-1]);
  431. }
  432.  
  433. int main(int argc, char *argv[]) {
  434.   char buf[1000],               // buffer used for reading from the file
  435.       original[1000][1000],     // original text, line by line
  436.       result[1000][1000];       // text obtained after applying operations
  437.     //char cmd[1000];
  438.   int original_line_count = 0,  // number of lines in the input file
  439.       result_line_count = 0,    // number of lines in the output file
  440.       i;
  441.  
  442.   if (argc != 4) {  // invalid number of arguments
  443.     fprintf(stderr,
  444.             "Usage: %s operations_string input_file output_file\n",
  445.             argv[0]);
  446.     return -1;
  447.   }
  448.  
  449.   // Open input file for reading
  450.   FILE *input_file = fopen(argv[2], "r");
  451.  
  452.   if (input_file == NULL) {
  453.     fprintf(stderr, "File \"%s\" not found\n", argv[2]);
  454.     return -2;
  455.   }
  456.  
  457.   // Read data in file line by line
  458.   while (fgets(buf, 1000, input_file)) {
  459.     strcpy(original[original_line_count], buf);
  460.     original_line_count++;
  461.   }
  462.  
  463.   fclose(input_file);
  464.  
  465.   char *p;
  466.   char matrice[1000][1000];
  467.   int m=0,n=0;
  468.   p=strtok(argv[1],",");
  469.   int cont=0;
  470.   int *val;
  471.   val=&original_line_count;
  472.   while(p!=NULL)
  473.   {
  474.     //printf("%c\n",*(p+1));
  475.    
  476.     for(i=0;i<strlen(p);i++)
  477.     {
  478.  
  479.       if(*(p+i)!=' ')
  480.       {
  481.         //printf("caracterul:%c\n",*(p+i) );
  482.         matrice[m][n++]=*(p+i);
  483.         if(*(p+i+1)==' '||*(p+i+1)=='\0')
  484.         {
  485.           matrice[m][n]='\0';
  486.           m++;
  487.           n=0;
  488.         }
  489.        
  490.       }
  491.     }
  492.  
  493.    
  494.     //printf("%c\n",matrice[0][0] );
  495.     int commandType=matrice[0][0];
  496.     //int limitLeft,limitRight;
  497.     switch (commandType)
  498.     {
  499.       case 'L':
  500.       //printf("radu oprea suge pula\n");
  501.       alignLeft(original,original_line_count,matrice[1],matrice[2]);
  502.       cont++;
  503.       break;
  504.       case 'l':
  505.       alignLeft(original,original_line_count,matrice[1],matrice[2]);
  506.       cont++;
  507.       break;
  508.       case 'R':
  509.       alignRight(original,original_line_count,matrice[1],matrice[2]);
  510.       cont++;
  511.       break;
  512.       case 'r':
  513.       alignRight(original,original_line_count,matrice[1],matrice[2]);
  514.       cont++;
  515.       break;
  516.       case 'C':
  517.       center(original,original_line_count,matrice[1],matrice[2]);
  518.       cont++;
  519.       break;
  520.       case 'c':
  521.       center(original,original_line_count,matrice[1],matrice[2]);
  522.       cont++;
  523.       break;
  524.       case 'I':
  525.      /* if(strcmp(matrice[1],"n") || strcmp(matrice[1],"b") || strcmp(matrice[1],"a") || strcmp(matrice[1],"A"))
  526.       {
  527.         printf("Invalid operation!\n");
  528.         break;
  529.       }*/
  530.       list(original,original_line_count,matrice[1],matrice[2],matrice[3],matrice[4]);
  531.       cont++;
  532.       break;
  533.       case 'O':
  534.       /*if(strcmp(matrice[1],"n") || strcmp(matrice[1],"b") || strcmp(matrice[1],"a") || strcmp(matrice[1],"A"))
  535.       {
  536.         printf("Invalid operation!\n");
  537.         break;
  538.       }*/
  539.       orderedList(original,original_line_count,matrice[1],matrice[2],matrice[3],matrice[4],matrice[5]);
  540.       cont++;
  541.       break;
  542.       case 'P':
  543.       paragraphs(original,original_line_count,matrice[1],matrice[2],matrice[3]);
  544.       cont++;
  545.       break;
  546.       /*case 'J':
  547.       justify(original,original_line_count,matrice[1],matrice[2]);
  548.       break;*/
  549.       case 'W':
  550.       wrap(original,val,matrice[1]);
  551.       cont++;
  552.       break;
  553.     }
  554.     if(cont==10)
  555.         printf("Too many operations! Only the first 10 will be applied.\n");
  556.     p=strtok(NULL,",");
  557.  
  558.    
  559.     m=0;
  560.     n=0;
  561.   }
  562.   for (i = 0; i < original_line_count; i++) {
  563.     strcpy(result[i], original[i]);
  564.     //printf("%s",result[i] );
  565.   }
  566.  
  567.   result_line_count = original_line_count;
  568.  
  569.   // Open output file for writing
  570.   FILE *output_file = fopen(argv[3], "w");
  571.  
  572.   if (output_file == NULL) {
  573.     fprintf(stderr, "Could not open or create file \"%s\"\n", argv[3]);
  574.     return -2;
  575.   }
  576.  
  577.   // Write result in output file
  578.   for (i = 0; i < result_line_count; i++) {
  579.     fputs(result[i], output_file);
  580.   }
  581.   fclose(output_file);
  582.  
  583. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement