Share Pastebin
Guest
Public paste!

Lenrek

By: a guest | Aug 4th, 2009 | Syntax: C | Size: 2.31 KB | Hits: 56 | Expires: Never
This paste has a previous version, view the difference. Copy text to clipboard
  1. /**
  2.     Converte arquivos de entrada Expert
  3.     para arquivos compatíveis com entrada
  4.     do SVM^light e suas variações.
  5. **/
  6. # include <stdio.h>
  7.  
  8. typedef struct svmdata {          // struct por ser parâmetro natural pra string...
  9.     char campo[500][500];
  10. } SVMDATA;
  11.  
  12. int converte(char*,char*,char*);
  13.  
  14. const unsigned int TAMANHO_LINHA = 15000;
  15.  
  16. int converte(char* in, char* out, char* comp)
  17. {
  18.  
  19.     FILE *infile;   // primeiro parametro da linha de comando
  20.     FILE *outfile;  // segundo parametro da linha de comando
  21.  
  22.     infile = fopen(in, "r");
  23.     outfile = fopen(out, "w");
  24.  
  25.     int i,k;                   // i para percorrer linha e k para marcar numero de campos
  26.     SVMDATA entrada;
  27.     char linha[TAMANHO_LINHA],target[3],compara1[100],compara2[100];
  28.  
  29.     fgets(linha,TAMANHO_LINHA,infile);
  30.     fprintf(outfile,"#%s #%s",comp,linha); // nao trata primeira linha (comentario?)
  31.        
  32.     while ( !feof(infile))              // começa a varrer arquivo
  33.     {
  34.                 fgets(linha,TAMANHO_LINHA,infile); //lê a linha do arquivo texto
  35.         i=0;                // indice pra varrer linha.
  36.         k=0;                // indice para marcar campo
  37.         if (!(strcmp(linha,"\n"))) continue; //verifica se tem linha vazia
  38.         while (linha[i] != '\0')
  39.                 {
  40.                     if ((linha[i] == 9) || (linha[i] == 32)) // se char é tab ou espaço
  41.                         k++;                                 // vai pra proximo campo...
  42.                     else
  43.                         {
  44.                         char novalinha[2]="";
  45.                         novalinha[0]=linha[i];
  46.                         strcat(entrada.campo[k],novalinha);         // ...senão adiciona ao campo atual
  47.                         }
  48.                
  49.                     i++;                              // proximo char da linha
  50.                 }      
  51.                
  52.                 strcpy(compara1,comp);
  53.                 strcpy(compara2,comp);
  54.                 strcat(compara1,"\n");
  55.                 if (strcmp(entrada.campo[k],compara1) && strcmp(entrada.campo[k],compara2))
  56.                         strcpy(target,"+1");
  57.                 else
  58.                         strcpy(target,"-1");
  59.                 fprintf(outfile,target); //compara comp com ultimo campo e define target
  60.                
  61.                 int id;
  62.                 for (id=1;id<k;id++)
  63.                         fprintf(outfile," %d:%s",id,entrada.campo[id]); // grava cada id:campo
  64.                 fprintf(outfile,"\n");   // prox linha
  65.                
  66.                 int zera;
  67.                 for (zera=0;zera<=k;zera++)
  68.                         strcpy(entrada.campo[zera],""); //zera os campos
  69.     }  
  70.     fclose(outfile);
  71.     fclose(infile);
  72. }