Ir ao conteúdo
  • Cadastre-se
Bruna DElia

C Como salvar dados em formato .csv ?

Recommended Posts

Basta gravar os valores em um arquivo separando eles por virgula.

//http://www.cplusplus.com/reference/cstdio/fopen/
FILE *file = fopen("caminho do arquivo", "w");

char *varTexto = "texto";
int varInt = 1;
float varFloat = 3.1416;

//fprintf funciona de maneira semelhante a printf http://www.cplusplus.com/reference/cstdio/fprintf/
fprintf(file, "%s,%d,%f", varTexto, varInt, varFloat);

char *varTexto2 = "texto com , virgula";
int varInt2 = 2;
float varFloat2 = 1.2;

//Caso o campo possua virgula(,) ele deve ser gravado entre aspas.
fprintf(file, "\"%s\",%d,%f", varTexto2, varInt2, varFloat2);

//http://www.cplusplus.com/reference/cstdio/fclose/
fclose(file);

 

  • Curtir 1
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloquei dessa forma, mas não deu certo. Estou lendo de um arquivo de texto (arquivo), uma sequência com 5200 genes, onde cada um começa com >, a partir dele, começo a contar a, t, g ou c, faço as contas de total, porcentagem e a conta da temperatura, mas quando abro o arquivo da tabela, só aparece escrito temperatura vários vezes, sem os valores. O que pode estar errado?

 

char *varTexto="temperatura";
    while((letra=fgetc(arquivo))!=EOF){
        while(letra=='>'){
        if(letra=='A') { a++; }
        if(letra=='C') { c++; }
        if(letra=='G') { g++; }
        if(letra=='T') { t++; }
            total= a+t+c+g;
            por=((c+g)/(total))*100;
            temp= 64.9+0.41*(por)-(500/(total));
            fprintf(file, "%s,%f", varTexto, temp);
        }
    }

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual o tipo da variável temp?

 

Também poderia disponibilizar ao menos parte do arquivo? Assim poderei auxiliá-la melhor.

Editado por HwapX
  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Bruna DElia     nesse código  que você postou, o segundo while vai ficar em loop e não vai sair,  por que quando a variável letra for igual  " > "  , ele entra no segundo loop e como a variável letra será sempre igual a " > ", pois não é feito nenhuma outra leitura usando essa variável dentro desse loop, ele continua indefinidamente,   já o fprintf deveria gravar certo tanto a palavra temperatura como o valor da variável temp, se a variável temp for do tipo float  .

    e você quer salvar o arquivo com a extensão . csv ?    se for isso então coloque essa extensão no lugar do . txt na hora de abrir o arquivo para gravar, assim :

file = fopen("nome_do_arquivo.csv","w");

e na hora de abrir ele com o bloco de notas clique em abrir e escolha o tipo todos os arquivos, pois se você clicar nele para abrir , então ele tentará abrir o arquivo com o exel . 

   poste um exemplo de como está escrito no arquivo que você está lendo .

se no arquivo onde está escrito as sequencias de genes estiver assim :

 

5abb4bc9eed93_arquivocsv.png.ff349df18d881788081487d43ae0faad.png

então seu código com algumas modificações seria assim :

#include <stdio.h>
int main(){
    FILE *file,*arquivo;
    char varTexto[20],letra;
    float temp,por=0;
    int a,c,g,t,total;
    if(arquivo=fopen("arquivo_para_ler.txt","r") == NULL) /*isso aqui não abre o arquivo*/
        printf("erro no arquivo\n");                /* apenas verifica se existe ou não */
    else{
        strcpy(varTexto,"temperatura");
        arquivo=fopen("arquivo_para_ler.txt","r");  /*isso realmente abe o arquivo para ler*/
        file=fopen("arquivo_onde_gravar.csv","w");  /*isso realmente abe o arquivo para escrever*/
        while((letra=fgetc(arquivo))!=EOF){
            if(letra =='>'){
                while((letra=fgetc(arquivo))!='\n' && letra!=EOF){/*vai ler até o final da linha */
                                                                  /*ou final do arquivo */
                    if(letra=='A') { a++; }
                    if(letra=='C') { c++; }
                    if(letra=='G') { g++; }
                    if(letra=='T') { t++; }
                    total = a+t+c+g;
                    por   = ((c+g)/total)*100;
                    temp  = 64.9+0.41*por-(500/total);
                    fprintf(file,"%s, %.2f\n",varTexto,temp);
                }
                if(letra==EOF)break;
            }
        }
        fclose(file);
        fclose(arquivo);
    }
    printf("final . . !     Tecle");
    getch();
    return 0;
}

 

Editado por devair1010
  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@devair1010 entendi, então o problema era dentro desse while mesmo, como não tinha conseguido arrumar, fiz em matlab, mas vou testar aq com o arquivo completo. Obrigada :)

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×