none
Como criar um arquivo .csv?

    Question

  • Olá, recentemente eu iniciei um tópico sobre como abrir um arquivo .csv no DataGridView. Esse tópico ainda está rolando, pois apesar de conseguir carregar o arquivo .csv no datagridview eu ainda estou tendo problemas por causa de um cabeçalho, porém dá pra deixar assim por enquanto. Minha dúvida agora é: Eu vou ler dados vindos de uma SerialPort, como posso salvar esses dados no formato .csv?

    No outro tópico eu informei que era iniciante, e pedi para quem fosse me ajudar tentar ser o mais didático possível, pois ainda me enrolo muito nos detalhes que para a maioria são óbvios.

     

    Muito obrigado desde já!

    Tuesday, September 21, 2010 7:53 PM

Answers

  • Éder,

    O formato CSV (Comma-Separated Values = Valores Separados por Vírgula) como o próprio nome já diz é um arquivo texto com valores separados por vírgula. Mais informações você encontra aqui.

    O que você deve fazer basicamente é ler os dados oriundos da porta serial (com o método ReadLine, ReadExisting ou outro), criar um arquivo texto e gravar os valores separados por vírgula.

    Para criar um arquivo texto você pode ver o exemplo desse link.

    Pode especificar melhor quais os "detalhes" que você mencionou acima? Qual sua dúvida especificamente?

    Att.

    Ari C. Raimundo
    MCAD, MCTS
    http://araimundo.blogspot.com

    Wednesday, September 22, 2010 3:52 AM
    Moderator
  • como do A1 até A5 é um cabeçalho fora do padrão, a única forma de mostrar estes dados é fora do datagridview. pode ser feito algo mais ou menos assim:

     

    int nCount = -1;
    String cCabecalho = "";
    foreach ( String linhaAtual in todasAsLinha )
    {
      nCount++;
     
      if (nCount > 5)
        TratarLinha(linhaAtual);
      else
        cCabecalho += linhaAtual;
    }
    TratarCabecalho( cCabecalho );

    Wednesday, September 22, 2010 1:07 PM
  • então não precisa do if q ignora as linhas de 1 a 5. vc terá q adaptar a rotina que lê o CSV.

    se o aplicativo que lê o CSV for de terceiros (exemplo: excel) então não tem como. vai ignorar mesmo.

    talvez tenha como configurar o excel para ler o CSV nesta estrutura, mas aí não tem nada de errado com o código fonte em c#. é o excel q não abre...

    Wednesday, September 22, 2010 2:26 PM

All replies

  • Éder,

    O formato CSV (Comma-Separated Values = Valores Separados por Vírgula) como o próprio nome já diz é um arquivo texto com valores separados por vírgula. Mais informações você encontra aqui.

    O que você deve fazer basicamente é ler os dados oriundos da porta serial (com o método ReadLine, ReadExisting ou outro), criar um arquivo texto e gravar os valores separados por vírgula.

    Para criar um arquivo texto você pode ver o exemplo desse link.

    Pode especificar melhor quais os "detalhes" que você mencionou acima? Qual sua dúvida especificamente?

    Att.

    Ari C. Raimundo
    MCAD, MCTS
    http://araimundo.blogspot.com

    Wednesday, September 22, 2010 3:52 AM
    Moderator
  • Ari, muito obrigado pela ajuda! Vou trabalhar com essas informações e acredito que será suficiente para atender meu problema. Sobre a parte dos "Detalhes" é o seguinte, eu utilizei o código fonte que um colega aqui do forúm postou para mim para abrir arquivos .csv, e eu me enrolei um pouco porque quando mando abrir o arquivo direto dá um erro: "Input array is longer than the number of columns in this table.". Eu fuçei e descobri que se eu apagasse as células A1 até A5, que formam uma espécie de cabeçalho (fora do padrão do resto da tabela), o arquivo abria de boa. Uma das coisas que quero saber é como posso fazer para esse arquivo sem ter que tirar o cabeçalho. 
    Wednesday, September 22, 2010 10:38 AM
  • vc pode fazer um foreach para ler cada uma das suas linhas (linha por linha) e dentro dele bota um if para comecar a ler somente a partir da 5.

    exemplo:

    int nCount = -1;
    foreach ( String linhaAtual in todasAsLinha )
    {
     nCount++;
    
     if (nCount > 5)
      TratarLinha(linhaAtual);
    }

     

    Wednesday, September 22, 2010 11:32 AM
  • Mas dessa forma os dados presente nas células A1 até A5 não serão mostrados, certo? Eu preciso dar um jeito de mostrar tudo...
    Wednesday, September 22, 2010 12:25 PM
  • como do A1 até A5 é um cabeçalho fora do padrão, a única forma de mostrar estes dados é fora do datagridview. pode ser feito algo mais ou menos assim:

     

    int nCount = -1;
    String cCabecalho = "";
    foreach ( String linhaAtual in todasAsLinha )
    {
      nCount++;
     
      if (nCount > 5)
        TratarLinha(linhaAtual);
      else
        cCabecalho += linhaAtual;
    }
    TratarCabecalho( cCabecalho );

    Wednesday, September 22, 2010 1:07 PM
  • Marcelo, eu tenho o aplicativo antigo, esse aplicativo le uma serial port, e cria um arquivo .csv com os dados. Quando esse aplicativo antigo cria o .csv ele cria com esse cabeçalho que vai de A1 a A5. Mas quando eu abro o arquivo pelo aplicativo antigo ele só mostra a partir da célula A7, confirmando o que você tinha falado no outro tópico, ele faz um if para excluir da leitura as células A1 até A5. 

    Sendo assim pergunto, como posso gravar com esse cabeçalho? Tipo, se o .csv tem um padrão como posso montar um arquivo no esquema desse abaixo:

     

    A1(TEXTO)

    A2(TEXTO)

    A3(TEXTO)

    A4(TEXTO)-B4(NUMERO)

    A5(TEXTO)-B5(NUMERO)

    A6(VAZIA)

    A7(COLUNA1)-B7(COLUNA2)-C7(COLUNA3)-D7(COLUNA4)-E7(COLUNA5)-F7(COLUNA6)-G7(COLUNA7)

     

    O padrão do arquivo .csv que tenho que montar é assim, na hora de criar o arquivo ele criar com o cabeçalho, mas quando lê ele só lê a parte dos dados.

    • Edited by Éder Leite Wednesday, September 22, 2010 1:25 PM ERRO
    Wednesday, September 22, 2010 1:25 PM
  • então não precisa do if q ignora as linhas de 1 a 5. vc terá q adaptar a rotina que lê o CSV.

    se o aplicativo que lê o CSV for de terceiros (exemplo: excel) então não tem como. vai ignorar mesmo.

    talvez tenha como configurar o excel para ler o CSV nesta estrutura, mas aí não tem nada de errado com o código fonte em c#. é o excel q não abre...

    Wednesday, September 22, 2010 2:26 PM
  • Éder,

    Novidades quanto a essa sua dúvida?


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    Thursday, September 30, 2010 11:36 PM
    Moderator